In [1]:
import pandas as pd
import numpy as np
import json
import re 
import sys
import itertools
import dotenv
import os

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt

from IPython.display import Image

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
from spotipy.oauth2 import SpotifyOAuth
import spotipy.util as util

import matplotlib.pyplot as plt
from skimage import io

import warnings
warnings.filterwarnings("ignore")

dotenv.load_dotenv()
Out[1]:
True
In [2]:
# display plots inline, meaning the plots will be shown directly under the code cell that produced them.
%matplotlib inline
In [3]:
#If you're not familiar with this, save it! Makes using jupyter notebook on laptops much easier
from IPython.core.display import display, HTML
display(HTML("<style>.container { width:90% !important; }</style>"))
In [4]:
#another useful command to make data exploration easier
# NOTE: if you are using a massive dataset, this could slow down your code. 
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
In [5]:
Image("./assets/process.png")
Out[5]:
No description has been provided for this image

1. Datan valmistelu käyttöä varten¶

In [6]:
# Meidän täytyy rajoittaa dataa muisti ongelmien välttämiseksi (Otetaan väli jossa on varmasti kappaleita joista haluamme
# luodan vektorin)
spotify_df = pd.read_csv('./recommendations/data/tracks.csv', skiprows=range(1, 50000), nrows=50000)
spotify_df.head()
Out[6]:
id name popularity duration_ms explicit artists id_artists release_date danceability energy key loudness mode speechiness acousticness instrumentalness liveness valence tempo time_signature
0 6PAGJfVrbxdIhIJmbsDLim Desperados Under the Eaves 44 287733 0 ['Warren Zevon'] ['3mY9Ii0cL5SQxpOTAm8SHx'] 1976 0.337 0.191 5 -16.840 1 0.0330 0.8370 0.084800 0.0587 0.246 144.698 4
1 7uxtHhz6AXBItoCySc3lrE Two More Bottles Of Wine 44 181733 0 ['Delbert McClinton'] ['3Ri72CuuQSCLLkDRJgniFU'] 1976-01-01 0.641 0.711 9 -9.660 1 0.0473 0.3980 0.000002 0.0853 0.900 140.487 4
2 2XgmRcQs8o709APqLLNUVd The End Is Not in Sight (The Cowboy Tune) - Re... 44 230867 0 ['Amazing Rhythm Aces'] ['5wpS6LUdQYMoAreKITVtrH'] 1976-04-08 0.696 0.456 4 -15.175 1 0.0295 0.4180 0.000637 0.1200 0.920 130.468 4
3 4CJhWQrtCkppHhOtAZBjik Hacha Y Machete 44 333480 0 ['Héctor Lavoe'] ['7opp16lU7VM3l2WBdGMYHP'] 1976-01-01 0.581 0.778 10 -8.389 0 0.0475 0.1600 0.000000 0.1760 0.842 104.142 4
4 5sBI6UV3FULOhARmClbJS1 Extra Classic 44 191293 0 ['Gregory Isaacs'] ['6QHu71f8LLeT8n0GzfbYFc'] 1976-01-01 0.804 0.588 9 -11.155 1 0.0370 0.0116 0.001890 0.1470 0.962 133.684 4

Huomioitavaa¶

  • Tämä data on kappaleiden tasolla
  • Numeerisia arvoja joita pystymme käyttämään kappaleiden vertailuun (elävyys, tempo, valenssi jne.).
  • Julkaisupäivämäärästä tulee hyödyllinen. Täytyy one-hot-encoding (OHE) muuttuja julkaisupäivämäärälle viiden vuoden välein.
  • OHE-muuttujia myös suosiolle. Tässäkin viiden vuoden väleinä.
  • Tässä ei ole mitään tietoa kappaleen genrestä, mikä olisi hyödyllistä. Pelkkä tämä data ei auta meitä löytämään asiaankuuluvaa sisältöä, koska tämä on sisältöön perustuva suosittelujärjestelmä. Onneksi on olemassa tiedosto nimeltä artists.csv, josta saadaan kappaleelle genre artistin perusteella.
In [7]:
genre_data = pd.read_csv('./recommendations/data/artists.csv')
genre_data[10000:10005]
Out[7]:
id followers genres name popularity
10000 3wbftONQjYa0CGlyEwxJUR 36108.0 ['classic schlager', 'discofox', 'schlager', '... Brunner & Brunner 42
10001 7ynsUZ8GP3m1rFDjvs2svD 16453.0 ['german rock', 'liedermacher', 'ostrock'] Keimzeit 39
10002 1ReCqmDLLcp6Z0bCh2JDCA 7276.0 ['albanian pop'] Capital T 40
10003 2MyDQyV0Hui1sTpOQW9jIU 419.0 ['kleine hoerspiel'] Markus Topf 39
10004 6IiAqwbN9GAxRHD5JBUcSz 15052.0 ['hoerspiel', 'reading'] Tommy Jaud 55

Huomioitavaa¶

  • Tämä data on artistin tasolla.
  • Genret tulevat olemaan todella hyödyllisiä. Genre-sarake vaikuttaa olevan listamuodossa, mutta se todennäköisesti ei ole. Tutkitaan tätä tarkemmin.
In [8]:
genre_data.dtypes
Out[8]:
id             object
followers     float64
genres         object
name           object
popularity      int64
dtype: object
In [9]:
genre_data['genres'].values[0]
genre_data['genres'].values[0][0]
Out[9]:
'['

Kuten näemme, se on itse asiassa merkkijono, joka näyttää listalta. Tehdään regex-lause genren poimimiseksi ja syötetään sen listaan.

In [10]:
genre_data['genres_upd'] = genre_data['genres'].apply(lambda x: [re.sub(' ','_',i) for i in re.findall(r"'([^']*)'", x)])
In [11]:
genre_data['genres_upd'].values[10000][0], genre_data['genres_upd'].values[10000][1]
Out[11]:
('classic_schlager', 'discofox')

Nyt meillä on genre-sarake muodossa, jota voimme käyttää.¶

Tämä data on artistin tasolla ja edellinen datasetti on kappaleen tasolla. Seuraavaksi täytyy:

  • Räjäyttää artistit-sarake edellisessä datasetissä niin, että jokaisella kappaleen artistilla (kappaleella voi olla monta artistia) on oma rivinsä.
  • Yhdistää genre_data räjäytettyyn datasettiin.

Ensiksi täytyy tehdä kaksi asiaa:

1. Samankaltaisesti kuin aiemmin, meidän tarvitsee poimia artistit merkkijonolistasta.¶

In [12]:
spotify_df['artists_upd_v1'] = spotify_df['artists'].apply(lambda x: re.findall(r"'([^']*)'", x))
spotify_df['artists'].values[0]
Out[12]:
"['Warren Zevon']"
In [13]:
spotify_df['artists_upd_v1'].values[0][0]
Out[13]:
'Warren Zevon'

Tämä näyttää hyvältä, mutta toimiko tämä jokaiselle artistin merkkijonoformaatille? Tarkistetaan vielä...

In [14]:
spotify_df[spotify_df['artists_upd_v1'].apply(lambda x: not x)].head(5)
Out[14]:
id name popularity duration_ms explicit artists id_artists release_date danceability energy key loudness mode speechiness acousticness instrumentalness liveness valence tempo time_signature artists_upd_v1
265 435wiGMomEIavS3j8IG2tZ Questions 39 239960 0 ["Manfred Mann's Earth Band"] ['2utNxkLhreF1oIfO8kQT3q'] 1976-08-27 0.390 0.277 9 -12.482 1 0.0294 0.738000 0.002840 0.0708 0.204 98.043 4 []
334 5endSWellqnUqEIO2OOdzj Cherchez la Femme / Se Si Bon 38 347600 0 ["Dr. Buzzard's Original Savannah Band"] ['0i64fKwsnTQsPqbov8mZUh'] 1976 0.699 0.333 0 -19.342 1 0.0595 0.004010 0.000000 0.0607 0.533 115.147 4 []
850 0hyZgl8tHThlycPEVwBpax Baby Love 47 262827 0 ["Mother's Finest"] ['3csSQdDVhJlP3BUOoZ2N2H'] 1977 0.587 0.783 5 -8.608 1 0.0722 0.078400 0.000022 0.7830 0.956 92.059 4 []
1152 5Or7qYzXrTvGLtGPdSq0zV Det Bedste Til Mig Og Mine Venner 41 264107 0 ["Gasolin'"] ['0e7UgnX6ObqqX5EcMeuA0E'] 1977-05-01 0.282 0.696 5 -5.081 1 0.0425 0.001320 0.000000 0.6970 0.362 149.560 4 []
1240 2o1rN5QhKveneGrlBZiMYu You Make Me Sick 39 129400 0 ["Satan's Rats"] ['2IJJSEnYTWNaL8Ezk6yzAE'] 1977 0.580 0.745 1 -12.324 1 0.0359 0.000065 0.658000 0.0542 0.961 123.498 4 []

Näyttää siltä, että se ei poiminut kaikkia niistä, ja se johtuu artisteista, joilla on heittomerkki nimessään ja siitä, että he ovat suljettuina täysiin lainausmerkkeihin. Kirjoitetaan toinen regex-lause käsittelemään tämä ja sitten yhdistetään nämä kaksi.

In [15]:
# Regex-lauseke etsii ja palauttaa kaikki tekstit, jotka ovat suljettuina lainausmerkeissä (" "), ja tallentaa ne löydetyt tekstipätkät ryhmään, joka palautetaan.
spotify_df['artists_upd_v2'] = spotify_df['artists'].apply(lambda x: re.findall('\"(.*?)\"',x)) 
spotify_df['artists_upd_v2'].values[164]
Out[15]:
[]
In [16]:
# Yhdistetään
spotify_df['artists_upd'] = np.where(spotify_df['artists_upd_v1'].apply(lambda x: not x), spotify_df['artists_upd_v2'], spotify_df['artists_upd_v1'] )
In [17]:
# Luodaan oma kappaleen tunniste, koska samasta kappaleesta on kaksoiskappaleita eri id:llä.
spotify_df['artists_song'] = spotify_df.apply(lambda row: row['artists_upd'][0]+str(row['name']),axis = 1)
# Järjestetään setti
spotify_df.sort_values(['artists_song','release_date'], ascending = False, inplace = True)
spotify_df[spotify_df['name']=='Adore You']
Out[17]:
id name popularity duration_ms explicit artists id_artists release_date danceability energy key loudness mode speechiness acousticness instrumentalness liveness valence tempo time_signature artists_upd_v1 artists_upd_v2 artists_upd artists_song
36218 5AnCLGg35ziFOloEnXK4uu Adore You 71 278747 0 ['Miley Cyrus'] ['5YGY8feqx7naU7z4HrwZM6'] 2013-10-04 0.583 0.655 0 -5.407 1 0.0315 0.1110 0.000004 0.113 0.201 119.759 4 [Miley Cyrus] [] [Miley Cyrus] Miley CyrusAdore You
41885 3jjujdWJ72nww5eGnfs2E7 Adore You 88 207133 0 ['Harry Styles'] ['6KImCVD70vtIoJWnq6nGn3'] 2019-12-13 0.676 0.771 8 -3.675 1 0.0483 0.0237 0.000007 0.102 0.569 99.048 4 [Harry Styles] [] [Harry Styles] Harry StylesAdore You
42525 1M4qEo4HE3PRaCOM7EXNJq Adore You 74 207133 0 ['Harry Styles'] ['6KImCVD70vtIoJWnq6nGn3'] 2019-12-06 0.676 0.771 8 -3.675 1 0.0483 0.0237 0.000007 0.102 0.569 99.048 4 [Harry Styles] [] [Harry Styles] Harry StylesAdore You
In [18]:
# Poistetaan duplikaatit
spotify_df.drop_duplicates('artists_song',inplace = True)
spotify_df[spotify_df['name']=='Adore You']
Out[18]:
id name popularity duration_ms explicit artists id_artists release_date danceability energy key loudness mode speechiness acousticness instrumentalness liveness valence tempo time_signature artists_upd_v1 artists_upd_v2 artists_upd artists_song
36218 5AnCLGg35ziFOloEnXK4uu Adore You 71 278747 0 ['Miley Cyrus'] ['5YGY8feqx7naU7z4HrwZM6'] 2013-10-04 0.583 0.655 0 -5.407 1 0.0315 0.1110 0.000004 0.113 0.201 119.759 4 [Miley Cyrus] [] [Miley Cyrus] Miley CyrusAdore You
41885 3jjujdWJ72nww5eGnfs2E7 Adore You 88 207133 0 ['Harry Styles'] ['6KImCVD70vtIoJWnq6nGn3'] 2019-12-13 0.676 0.771 8 -3.675 1 0.0483 0.0237 0.000007 0.102 0.569 99.048 4 [Harry Styles] [] [Harry Styles] Harry StylesAdore You

Nyt voidaan räjäyttää setti kuten suunniteltiin...

In [19]:
# Poistetaan genre_data:sta id sarake koska datasetti jo sisältää id:n
upd_genre_data = genre_data.drop(columns="id")

# Räjäytetään 'artists_upd' -sarake 'spotify_df', joka sisältää kappaleiden artistit listoina,
# eli jokainen kappaleen artisti saa oman rivinsä. Tätä varten käytetään 'explode' -toimintoa. 
# Uusi DataFrame sisältää sekä räjäytetyn 'artists_upd' -sarakkeen että 'id' -sarakkeen.
artists_exploded = spotify_df[['artists_upd','id']].explode('artists_upd')

# Yhdistetään datasetti genre datalla vaseemmalla liitoksella ('left join') 'artists_upd' ja 'name' 
# -sarakkeiden välillä. Tämä rikastaa 'artists_exploded' -DataFramea genretiedolla.
artists_exploded_enriched = artists_exploded.merge(upd_genre_data, how = 'left', left_on = 'artists_upd',right_on = 'name')

# Suodatetaan pois ne rivit, joissa 'genres_upd' -sarake on tyhjä (null). 
artists_exploded_enriched_nonnull = artists_exploded_enriched[~artists_exploded_enriched.genres_upd.isnull()]

artists_exploded_enriched_nonnull[artists_exploded_enriched_nonnull['id'] =='6KuQTIu1KoTTkLXKrwlLPV']
Out[19]:
artists_upd id followers genres name popularity genres_upd

Melkein valmista... nyt täytyy enään:

  • Ryhmitellä kappaleet id:n perusteella ja käytännössä luoda listoja listoista
  • Yhdistää nämä listat ja tulostaa niistä uniikit arvot
In [20]:
# Ryhmitellään DataFrame 'artists_exploded_enriched_nonnull' 'id' -sarakkeen perusteella ja luodaan listoja 'genres_upd' -sarakkeen arvoista
artists_genres_consolidated = artists_exploded_enriched_nonnull.groupby('id')['genres_upd'].apply(list).reset_index()

# Luodaan uusi sarake 'consolidated_genre_lists', joka sisältää uniikit genrelistojen arvot
artists_genres_consolidated['consolidated_genre_lists'] = artists_genres_consolidated['genres_upd'].apply(lambda x: list(set(list(itertools.chain.from_iterable(x)))))

artists_genres_consolidated.head()
Out[20]:
id genres_upd consolidated_genre_lists
0 000u1dTg7y1XCDXi80hbBX [[dance_pop, europop, new_wave_pop, pop_rock, ... [scottish_rock, pop_rock, new_wave_pop, dance_...
1 0024tEymsoc9FyKUauQngQ [[cyberpunk, new_age, synthesizer]] [new_age, cyberpunk, synthesizer]
2 003FTlCpBTM4eSqYSWPv4H [[modern_rock, neo_mellow, pop_punk, pop_rock,... [pop_rock, neo_mellow, modern_rock, pop_punk, ...
3 0046quUYhSAFccrKIC3Iht [[electro, freestyle, funk, new_jack_swing, qu... [new_jack_swing, freestyle, quiet_storm, urban...
4 004G9E3EZhxxn5aE9yEQqx [[argentine_rock, blues_latinoamericano, latin... [argentine_rock, latin_alternative, rock_en_es...
In [21]:
# Yhdistetään DataFrame 'spotify_df' 'artists_genres_consolidated' DataFrameen 'id' -sarakkeen avulla vasemmalla liitoksella ('left join')
spotify_df = spotify_df.merge(artists_genres_consolidated[['id','consolidated_genre_lists']], on='id', how='left')

spotify_df.head()
Out[21]:
id name popularity duration_ms explicit artists id_artists release_date danceability energy key loudness mode speechiness acousticness instrumentalness liveness valence tempo time_signature artists_upd_v1 artists_upd_v2 artists_upd artists_song consolidated_genre_lists
0 6p0ecVFjeSu09Ncb1bUEGR Scattered Days - 2002 Mix Version 1 235093 0 ['강수지'] ['6yvfQfQ8CS9aXvGlyHEdoi'] 2002-03-01 0.669 0.4710 7 -6.515 0 0.0330 0.382 0.000000 0.0963 0.470 67.988 4 [강수지] [] [강수지] 강수지Scattered Days - 2002 Mix Version [classic_korean_pop]
1 1M97kKsHd1mw2rj4WCH2TA 你怎麼捨得我難過 48 293840 0 ['黃品源'] ['22eZSsFE2fxLnnC9Zga25b'] 1990-06-30 0.578 0.3340 9 -11.974 0 0.0267 0.541 0.000006 0.0675 0.243 135.934 4 [黃品源] [] [黃品源] 黃品源你怎麼捨得我難過 [classic_mandopop, mandopop, c-pop]
2 5cbbtFwm09MwwicU9SDHJA 掌聲響起 44 259387 0 ['鳳飛飛'] ['13ILSgBPHS5T6YCFw9Pc7R'] 1986-09-30 0.358 0.2080 10 -9.524 1 0.0339 0.884 0.000002 0.1500 0.278 131.261 4 [鳳飛飛] [] [鳳飛飛] 鳳飛飛掌聲響起 [classic_mandopop, vintage_chinese_pop, c-pop]
3 3LoGT3vFIUqpcNmFm4PUn4 そんなヒロシに騙されて 41 187240 0 ['高田みづえ'] ['2gSv29tig3fcanFgMBqq3J'] 1983-08-21 0.615 0.7230 5 -5.553 0 0.0315 0.423 0.000000 0.2850 0.543 139.860 4 [高田みづえ] [] [高田みづえ] 高田みづえそんなヒロシに騙されて [idol_kayo]
4 0aFLzyYOsaP5sf37DcY5fC 要愛就愛 23 173893 0 ['霜華雪華'] ['1yigjFXO8LMVXPhwqYTPol'] 1964-07-15 0.694 0.0914 0 -17.304 0 0.0481 0.845 0.000000 0.1120 0.465 109.759 4 [霜華雪華] [] [霜華雪華] 霜華雪華要愛就愛 [vintage_taiwan_pop]

2. Ominaisuuksien suunnittelu¶

  • Normalisoidaan liukulukumuuttujat
  • One-Hot-Encoding (OHE) vuosi- ja suosiomuuttujat
  • Luodaan artistigenreistä TF-IDF ominaisuuksia
In [22]:
spotify_df.tail()
Out[22]:
id name popularity duration_ms explicit artists id_artists release_date danceability energy key loudness mode speechiness acousticness instrumentalness liveness valence tempo time_signature artists_upd_v1 artists_upd_v2 artists_upd artists_song consolidated_genre_lists
47329 42OhQBFNIbMyxRGxyPOvQA Not Tonight (feat. Da Brat, Left Eye, Missy "M... 55 252520 0 ["Lil' Kim", 'Angie Martinez', 'Lisa "Left Eye... ['5tth2a3v0sWwV1C7bApBdX', '6VJqy1YyzrK4ZhgGs9... 1997-06-30 0.854 0.602 6 -10.162 0 0.3200 0.0689 0.00000 0.292 0.592 99.429 4 [ Kim", , , , , , , ] [Lil' Kim, Left Eye] [ Kim", , , , , , , ] Kim", Not Tonight (feat. Da Brat, Left Eye, M... NaN
47330 5jv3QxL0MFswzM1UJ2qQJM How Many Licks? (feat. Sisqo) 55 232800 1 ["Lil' Kim", 'Sisqo'] ['5tth2a3v0sWwV1C7bApBdX', '6x9QLdzo6eBZxJ1bHs... 2000-06-16 0.777 0.846 10 -3.110 0 0.1940 0.0508 0.00000 0.309 0.646 105.450 4 [ Kim", ] [Lil' Kim] [ Kim", ] Kim", How Many Licks? (feat. Sisqo) NaN
47331 2LP2uDQQ7eLMcUVE4aOpAV Crush on You (feat. Lil' Cease) - Remix 61 275947 0 ["Lil' Kim", "Lil' Cease"] ['5tth2a3v0sWwV1C7bApBdX', '6V4zyNV40Zyu5MGlhD... 1997-06-30 0.748 0.693 11 -7.832 0 0.2780 0.2820 0.00000 0.123 0.768 88.802 4 [ Kim", "Lil] [Lil' Kim, Lil' Cease] [ Kim", "Lil] Kim", "LilCrush on You (feat. Lil' Cease) - R... NaN
47332 5cIU5GZBbyMfgfXGcoQVYc Don't Stop Movin' - Radio Mix 54 215227 0 ["Livin' Joy", 'A. Manetta'] ['3PUzVXdNnsJGPDTIU7xvqu', '668qGVmYMvOeW6F0XH... 1997-01-01 0.704 0.722 2 -10.815 0 0.0446 0.0287 0.00341 0.297 0.859 129.992 4 [ Joy", ] [Livin' Joy] [ Joy", ] Joy", Don't Stop Movin' - Radio Mix NaN
47333 4s0o8TJHfX9LLHa0umnOzT Sunshine (feat. Lea) 64 225173 1 ["Lil' Flip", 'Lea'] ['4Q5sPmM8j4SpMqL4UA1DtS', '4tAhhPPEWcszcMjhYR... 2004-03-30 0.814 0.387 0 -9.867 1 0.0945 0.0248 0.00000 0.131 0.792 93.961 4 [ Flip", ] [Lil' Flip] [ Flip", ] Flip", Sunshine (feat. Lea) NaN
In [23]:
# Lisätään uusi sarake 'year', joka saadaan jakamalla 'release_date' -sarake väliviivojen avulla ja valitsemalla ensimmäinen osa
spotify_df['year'] = spotify_df['release_date'].apply(lambda x: x.split('-')[0])

# Valitaan kaikki float-tyypin muuttujat ja tallennetaan ne muuttujaan 'float_cols'
float_cols = spotify_df.dtypes[spotify_df.dtypes == 'float64'].index.values

# Näytetään 'popularity' -sarakkeen kuvaileva tilastollinen tieto
spotify_df['popularity'].describe()
Out[23]:
count    47334.000000
mean        41.678688
std         23.226992
min          0.000000
25%         21.000000
50%         47.000000
75%         59.000000
max        100.000000
Name: popularity, dtype: float64
In [24]:
# Luodaan uusi sarake 'popularity_red', joka lasketaan jakamalla 'popularity' -sarakkeen arvot 5:llä ja muuttamalla ne kokonaisluvuiksi
spotify_df['popularity_red'] = spotify_df['popularity'].apply(lambda x: int(x/5))

# Käytetään lambda-funktiota varmistaaksemme, että 'consolidated_genre_lists' -sarake sisältää listoja, ja jos ei, asetetaan tyhjä lista [] koska tfid
# ei osaa käsitellä null arvoja
spotify_df['consolidated_genre_lists'] = spotify_df['consolidated_genre_lists'].apply(lambda d: d if isinstance(d, list) else [])

# Tulostetaan DataFrame 'spotify_df' ensimmäiset rivit
spotify_df.head()
Out[24]:
id name popularity duration_ms explicit artists id_artists release_date danceability energy key loudness mode speechiness acousticness instrumentalness liveness valence tempo time_signature artists_upd_v1 artists_upd_v2 artists_upd artists_song consolidated_genre_lists year popularity_red
0 6p0ecVFjeSu09Ncb1bUEGR Scattered Days - 2002 Mix Version 1 235093 0 ['강수지'] ['6yvfQfQ8CS9aXvGlyHEdoi'] 2002-03-01 0.669 0.4710 7 -6.515 0 0.0330 0.382 0.000000 0.0963 0.470 67.988 4 [강수지] [] [강수지] 강수지Scattered Days - 2002 Mix Version [classic_korean_pop] 2002 0
1 1M97kKsHd1mw2rj4WCH2TA 你怎麼捨得我難過 48 293840 0 ['黃品源'] ['22eZSsFE2fxLnnC9Zga25b'] 1990-06-30 0.578 0.3340 9 -11.974 0 0.0267 0.541 0.000006 0.0675 0.243 135.934 4 [黃品源] [] [黃品源] 黃品源你怎麼捨得我難過 [classic_mandopop, mandopop, c-pop] 1990 9
2 5cbbtFwm09MwwicU9SDHJA 掌聲響起 44 259387 0 ['鳳飛飛'] ['13ILSgBPHS5T6YCFw9Pc7R'] 1986-09-30 0.358 0.2080 10 -9.524 1 0.0339 0.884 0.000002 0.1500 0.278 131.261 4 [鳳飛飛] [] [鳳飛飛] 鳳飛飛掌聲響起 [classic_mandopop, vintage_chinese_pop, c-pop] 1986 8
3 3LoGT3vFIUqpcNmFm4PUn4 そんなヒロシに騙されて 41 187240 0 ['高田みづえ'] ['2gSv29tig3fcanFgMBqq3J'] 1983-08-21 0.615 0.7230 5 -5.553 0 0.0315 0.423 0.000000 0.2850 0.543 139.860 4 [高田みづえ] [] [高田みづえ] 高田みづえそんなヒロシに騙されて [idol_kayo] 1983 8
4 0aFLzyYOsaP5sf37DcY5fC 要愛就愛 23 173893 0 ['霜華雪華'] ['1yigjFXO8LMVXPhwqYTPol'] 1964-07-15 0.694 0.0914 0 -17.304 0 0.0481 0.845 0.000000 0.1120 0.465 109.759 4 [霜華雪華] [] [霜華雪華] 霜華雪華要愛就愛 [vintage_taiwan_pop] 1964 4
In [25]:
# Function joka luo OHE ominaisuuksia
# Tätä tarvitaan myöhemmin
def ohe_prep(df, column, new_name):
    """ 
    Luo yhden piirteen koodatun sarakkeen tietylle sarakkeelle

    Parametrit: 
        df (pandasin tietokehys): Spotifyn tietokehys
        column (str): Käsiteltävä sarake
        new_name (str): Uusi sarakkeen nimi
        
    Palauttaa: 
        tf_df: Yhden piirteen koodatut ominaisuudet 
    """
    
    # Käytä pandasin get_dummies -toimintoa yhden piirteen koodaamiseen määritettyyn sarakkeeseen
    tf_df = pd.get_dummies(df[column])

    # Hanki vastaluodun tietokehyksen sarakkeiden nimet
    feature_names = tf_df.columns

    # Uudelleennimeä tietokehyksen sarakkeet annetulla uudella nimellä
    tf_df.columns = [new_name + "|" + str(i) for i in feature_names]

    # Nollaa tietokehyksen indeksi
    tf_df.reset_index(drop=True, inplace=True)    
    
    return tf_df

Image('./assets/tfidf.png')
Out[25]:
No description has been provided for this image
In [26]:
# Function jolla rakennamme koko ominaisuus setin
def create_feature_set(df, float_cols):
    """ 
    Prosessoi Spotifyn tietokehyksen luodaksesi lopullisen ominaisuusjoukon, jota käytetään suositusten luomiseen

    Parametrit: 
        df (pandasin tietokehys): Spotifyn tietokehys
        float_cols (list(str)): Lista liukulukusarakkeista, jotka skaalataan 
        
    Palauttaa: 
        final: lopullinen ominaisuusjoukko 
    """
    
    # Alusta TfidfVectorizer
    tfidf = TfidfVectorizer()

    # Sovita ja muunna genrelistat TF-IDF-matriisiksi
    tfidf_matrix = tfidf.fit_transform(df['consolidated_genre_lists'].apply(lambda x: " ".join(x)))

    # Muunna TF-IDF-matriisi tietokehykseksi
    genre_df = pd.DataFrame(tfidf_matrix.toarray())

    # Uudelleennimeä genre-tietokehyksen sarakkeet
    genre_df.columns = ['genre' + "|" + i for i in tfidf.get_feature_names_out()]

    # Nollaa genre-tietokehyksen indeksi
    genre_df.reset_index(drop=True, inplace=True)

    # Luo yhden piirteen koodattu vuosisarakkeelle ja skaalaa se 0.5: lla
    year_ohe = ohe_prep(df, 'year','year') * 0.5

    # Luo yhden piirteen koodattu suosion_ punainen sarake ja skaalaa se 0.15: llä
    popularity_ohe = ohe_prep(df, 'popularity_red','pop') * 0.15

    # Valitse liukuluvut
    floats = df[float_cols].reset_index(drop=True)

    # Alusta MinMaxScaler
    scaler = MinMaxScaler()

    # Sovita skaalaaja liukulukusarakkeisiin ja muunna ne
    floats_scaled = pd.DataFrame(scaler.fit_transform(floats), columns=floats.columns) * 0.2

    # Yhdistä genre-tietokehys, skaalatut liukulukutietokehykset, yhden piirteen koodattu suosion tietokehys ja yhden piirteen koodattu vuoden tietokehys
    final = pd.concat([genre_df, floats_scaled, popularity_ohe, year_ohe], axis=1)
     
    # Lisää kappaleen tunnussarake
    final['id'] = df['id'].values
    
    return final
In [27]:
complete_feature_set = create_feature_set(spotify_df, float_cols=float_cols)
complete_feature_set.head()
Out[27]:
genre|21st_century_classical genre|432hz genre|_brasileira genre|_hip_hop genre|_house genre|a_cappella genre|abstract genre|abstract_hip_hop genre|accordeon genre|accordion genre|acid_house genre|acid_jazz genre|acid_rock genre|acid_techno genre|acid_trance genre|acousmatic genre|acoustic genre|acoustic_blues genre|acoustic_chill genre|acoustic_guitar_cover genre|acoustic_pop genre|acoustic_punk genre|acoustic_rock genre|adoracao genre|adoracion genre|adult_standards genre|adventista genre|afghan_pop genre|african genre|african_gospel genre|african_percussion genre|african_reggae genre|african_rock genre|afrikaans genre|afrikaans_folk genre|afro genre|afro_dancehall genre|afro_house genre|afro_psych genre|afro_soul genre|afrobeat genre|afrofuturism genre|afrofuturismo_brasileiro genre|afropop genre|afroswing genre|aggrotech genre|ahead_jazz genre|alabama_indie genre|alabama_metal genre|alabama_rap genre|alaska_indie genre|alberta_country genre|album_rock genre|albuquerque_indie genre|alt_z genre|alternative_americana genre|alternative_country genre|alternative_dance genre|alternative_emo genre|alternative_hardcore genre|alternative_hip_hop genre|alternative_metal genre|alternative_pop genre|alternative_pop_rock genre|alternative_r genre|alternative_rock genre|alternative_roots_rock genre|ambeat genre|ambient genre|ambient_black_metal genre|ambient_folk genre|ambient_house genre|ambient_idm genre|ambient_pop genre|ambient_psychill genre|ambient_techno genre|ambient_worship genre|american_choir genre|american_classical genre|american_classical_piano genre|american_contemporary_classical genre|american_folk_revival genre|american_modern_classical genre|american_oi genre|american_orchestra genre|american_post genre|american_primitive genre|american_romanticism genre|american_shoegaze genre|anadolu_rock genre|anak genre|anarcho genre|ancient_mediterranean genre|and genre|anglican_liturgy genre|anime genre|anime_latino genre|anime_rock genre|anime_score genre|ann_arbor_indie genre|anthem_emo genre|anthem_worship genre|anti genre|antideutsche genre|antilliaanse_rap genre|antiviral_pop genre|appalachian_folk genre|arab_electronic genre|arab_folk genre|arab_groove genre|arab_metal genre|arab_pop genre|arab_trap genre|arabesk genre|arabic_jazz genre|argentine_ambient genre|argentine_hardcore genre|argentine_heavy_metal genre|argentine_hip_hop genre|argentine_indie genre|argentine_metal genre|argentine_punk genre|argentine_reggae genre|argentine_rock genre|argentine_telepop genre|arkansas_country genre|armenian_folk genre|art_pop genre|art_punk genre|art_rock genre|art_song genre|asakaa genre|asbury_park_indie genre|asian_american_hip_hop genre|athens_indie genre|atl_hip_hop genre|atl_trap genre|atlanta_metal genre|atlanta_punk genre|atmosphere genre|atmospheric_black_metal genre|atmospheric_dnb genre|atmospheric_doom genre|atmospheric_post genre|auckland_indie genre|audiophile_vocal genre|aussie_drill genre|aussie_emo genre|aussietronica genre|austin_americana genre|austin_singer genre|austindie genre|australian_alternative_pop genre|australian_alternative_rock genre|australian_black_metal genre|australian_comedy genre|australian_country genre|australian_dance genre|australian_electropop genre|australian_garage_punk genre|australian_hip_hop genre|australian_house genre|australian_indie genre|australian_indie_folk genre|australian_indigenous genre|australian_jazz genre|australian_metalcore genre|australian_pop genre|australian_psych genre|australian_r genre|australian_reggae_fusion genre|australian_rock genre|australian_singer genre|australian_talent_show genre|austrian_choir genre|austrian_classical_piano genre|austrian_orchestra genre|austrian_pop genre|austrian_punk genre|austro genre|austropop genre|auteur genre|autonomous_black_metal genre|autore genre|avant genre|axe genre|azeri_rap genre|azeri_traditional genre|azonto genre|azontobeats genre|b_argentino genre|b_brasileiro genre|b_en_espanol genre|b_italiano genre|bachata genre|bachata_dominicana genre|background_music genre|baglama genre|bagpipe_marching_band genre|bahamian_pop genre|baiao genre|bakersfield_sound genre|bal genre|balearic genre|balkan_brass genre|balkan_trap genre|ballet_class genre|ballroom genre|baltic_classical genre|baltimore_indie genre|banda genre|banda_caliente genre|banda_carnavalera genre|bandinhas genre|bandoneon genre|bangla genre|banjo genre|bansuri genre|barbadian_pop genre|barbershop genre|bard genre|bardcore genre|barnemusikk genre|barnmusik genre|barnsagor genre|barockinterpreten genre|baroque genre|baroque_ensemble genre|baroque_pop genre|baroque_violin genre|barrelhouse_piano genre|bass_house genre|bass_music genre|bass_trap genre|basshall genre|bassline genre|bath_indie genre|batidao_romantico genre|baton_rouge_rap genre|battle_rap genre|bay_area_hip_hop genre|bay_area_indie genre|bayerischer_rap genre|bboy genre|beach_music genre|beat genre|beat_italiano genre|beat_poetry genre|beatlesque genre|beats genre|bebop genre|bedroom_pop genre|bedroom_soul genre|belarusian_electronic genre|belarusian_indie genre|belarusian_pop genre|belarusian_punk genre|belarusian_rock genre|belgian_blues genre|belgian_contemporary_classical genre|belgian_dance genre|belgian_edm genre|belgian_hardcore genre|belgian_indie genre|belgian_indie_rock genre|belgian_jazz genre|belgian_new_wave genre|belgian_pop genre|belgian_punk genre|belgian_rock genre|belgian_singer genre|belgian_techno genre|belly_dance genre|belo_horizonte_indie genre|bemani genre|beninese_pop genre|bergen_indie genre|berlin_school genre|bhajan genre|bhangra genre|big_band genre|big_beat genre|big_room genre|birmingham_grime genre|birmingham_hip_hop genre|birmingham_metal genre|bitpop genre|black_comedy genre|black_metal genre|black_punk genre|black_thrash genre|blackened_crust genre|blackgaze genre|bleep_techno genre|bluegrass genre|bluegrass_gospel genre|blues genre|blues_latinoamericano genre|blues_mexicano genre|blues_rock genre|bmore genre|boeremusiek genre|bolero genre|bolero_cubano genre|bolero_mexicano genre|bomba_y_plena genre|boogaloo genre|boogie genre|boom_bap genre|boom_bap_brasileiro genre|bop genre|bornesange genre|bosnian_electronic genre|bossa_nova genre|bossa_nova_cover genre|bossa_nova_jazz genre|boston_electronic genre|boston_folk genre|boston_hardcore genre|boston_hip_hop genre|boston_indie genre|boston_metal genre|boston_punk genre|boston_rock genre|bounce genre|bouncy_house genre|bouzouki genre|bow_pop genre|boy_band genre|boy_soprano genre|bozlak genre|braindance genre|brass_band genre|brazilian_black_metal genre|brazilian_boogie genre|brazilian_ccm genre|brazilian_classical genre|brazilian_classical_piano genre|brazilian_dnb genre|brazilian_edm genre|brazilian_gospel genre|brazilian_groove_metal genre|brazilian_hardcore genre|brazilian_hip_hop genre|brazilian_indie genre|brazilian_jazz genre|brazilian_metal genre|brazilian_modern_jazz genre|brazilian_percussion genre|brazilian_power_metal genre|brazilian_progressive_metal genre|brazilian_punk genre|brazilian_punk_rock genre|brazilian_reggae genre|brazilian_rock genre|brazilian_ska genre|brazilian_soul genre|brazilian_tech_house genre|brazilian_thrash_metal genre|breakbeat genre|breakcore genre|brega genre|brega_funk genre|brighton_indie genre|brill_building_pop genre|brisbane_indie genre|bristol_electronic genre|brit_funk genre|british_alternative_rock genre|british_black_metal genre|british_blues genre|british_brass_band genre|british_choir genre|british_classical_piano genre|british_comedy genre|british_contemporary_classical genre|british_dance_band genre|british_death_metal genre|british_experimental genre|british_folk genre|british_grindcore genre|british_indie_rock genre|british_industrial genre|british_invasion genre|british_jazz genre|british_modern_classical genre|british_orchestra genre|british_post genre|british_power_metal genre|british_singer genre|british_soul genre|british_soundtrack genre|britpop genre|broadway genre|broken_beat genre|bronx_hip_hop genre|brooklyn_drill genre|brooklyn_indie genre|brostep genre|brutal_death_metal genre|brutal_deathcore genre|bubble_trance genre|bubblegrunge genre|bubblegum_dance genre|bubblegum_pop genre|buffalo_ny_indie genre|buffalo_ny_metal genre|bulgarian_electronic genre|bulgarian_pop genre|burmese_traditional genre|bush_ballad genre|c86 genre|cabaret genre|cali_rap genre|california_hardcore genre|calming_instrumental genre|calypso genre|cambodian_pop genre|cambridge_choir genre|cambridgeshire_indie genre|canadian_americana genre|canadian_blues genre|canadian_ccm genre|canadian_celtic genre|canadian_classical genre|canadian_classical_piano genre|canadian_contemporary_country genre|canadian_contemporary_r genre|canadian_country genre|canadian_electronic genre|canadian_electropop genre|canadian_experimental genre|canadian_folk genre|canadian_hardcore genre|canadian_hip_hop genre|canadian_house genre|canadian_indie genre|canadian_indie_folk genre|canadian_indigenous genre|canadian_latin genre|canadian_metal genre|canadian_old_school_hip_hop genre|canadian_pop genre|canadian_pop_punk genre|canadian_post genre|canadian_psychedelic genre|canadian_punk genre|canadian_rock genre|canadian_singer genre|canadian_soundtrack genre|cancion_infantil_mexicana genre|cancion_melodica genre|candy_pop genre|cantaditas genre|cantautor genre|cante_flamenco genre|canterbury_scene genre|canto_popular_uruguayo genre|cantopop genre|canzone_napoletana genre|cape_town_indie genre|cape_verdean_folk genre|caribbean_metal genre|carimbo genre|carnatic genre|carnatic_instrumental genre|carnatic_vocal genre|carnaval genre|carnaval_cadiz genre|carnaval_limburg genre|cartoon genre|catalan_folk genre|cathedral_choir genre|caucasian_classical genre|ccm genre|cedm genre|cello genre|celtic genre|celtic_metal genre|celtic_punk genre|celtic_rock genre|cha genre|chalga genre|chamame genre|chamber_choir genre|chamber_folk genre|chamber_orchestra genre|chamber_pop genre|chamber_psych genre|champeta genre|channel_islands_indie genre|channel_pop genre|chanson genre|chanson_paillarde genre|chanson_quebecois genre|chanson_virale genre|charanga genre|charango genre|chicago_blues genre|chicago_drill genre|chicago_hardcore genre|chicago_house genre|chicago_indie genre|chicago_punk genre|chicago_rap genre|chicago_soul genre|chicano_punk genre|chicano_rap genre|chicha genre|chihuahua_indie genre|children genre|chilean_hardcore genre|chilean_indie genre|chilean_rock genre|chilena genre|chill_groove genre|chill_guitar genre|chill_lounge genre|chill_pop genre|chill_r genre|chillhop genre|chillstep genre|chillwave genre|chinderlieder genre|chinese_audiophile genre|chinese_classical genre|chinese_classical_performance genre|chinese_classical_piano genre|chinese_electropop genre|chinese_hip_hop genre|chinese_idol_pop genre|chinese_indie genre|chinese_r genre|chinese_singer genre|chinese_worship genre|chiptune genre|chopped_and_screwed genre|choral genre|choro genre|christchurch_indie genre|christian_alternative_rock genre|christian_hard_rock genre|christian_hip_hop genre|christian_indie genre|christian_metal genre|christian_metalcore genre|christian_music genre|christian_pop genre|christian_power_metal genre|christian_punk genre|christian_relaxative genre|christian_rock genre|christian_thrash_metal genre|christian_trap genre|christlicher_rap genre|christmas_instrumental genre|chunchaca genre|chutney genre|cincinnati_rap genre|circuit genre|circus genre|city_pop genre|classic_afrobeat genre|classic_anime genre|classic_arab_pop genre|classic_australian_country genre|classic_belgian_pop genre|classic_bhangra genre|classic_bollywood genre|classic_canadian_rock genre|classic_cantopop genre|classic_city_pop genre|classic_colombian_pop genre|classic_country_pop genre|classic_czech_pop genre|classic_danish_pop genre|classic_danish_rock genre|classic_dubstep genre|classic_dutch_pop genre|classic_finnish_pop genre|classic_finnish_rock genre|classic_french_pop genre|classic_garage_rock genre|classic_girl_group genre|classic_greek_pop genre|classic_greek_rock genre|classic_hardstyle genre|classic_house genre|classic_hungarian_pop genre|classic_hungarian_rock genre|classic_icelandic_pop genre|classic_indo_pop genre|classic_indonesian_rock genre|classic_iskelma genre|classic_israeli_pop genre|classic_italian_folk_pop genre|classic_italian_pop genre|classic_j genre|classic_japanese_jazz genre|classic_k genre|classic_kollywood genre|classic_korean_pop genre|classic_luk_thung genre|classic_malaysian_pop genre|classic_mandopop genre|classic_moroccan_pop genre|classic_norwegian_pop genre|classic_nz_pop genre|classic_opm genre|classic_pakistani_pop genre|classic_peruvian_pop genre|classic_polish_pop genre|classic_portuguese_pop genre|classic_praise genre|classic_progressive_house genre|classic_punjabi_pop genre|classic_rock genre|classic_russian_pop genre|classic_russian_rock genre|classic_schlager genre|classic_sinhala_pop genre|classic_soul genre|classic_soundtrack genre|classic_swedish_pop genre|classic_thai_pop genre|classic_tollywood genre|classic_turkish_pop genre|classic_uk_pop genre|classic_venezuelan_pop genre|classical genre|classical_accordion genre|classical_baritone genre|classical_bass genre|classical_cello genre|classical_clarinet genre|classical_contralto genre|classical_countertenor genre|classical_era genre|classical_flute genre|classical_guitar genre|classical_harp genre|classical_horn genre|classical_mezzo genre|classical_oboe genre|classical_organ genre|classical_performance genre|classical_piano genre|classical_piano_trio genre|classical_saxophone genre|classical_soprano genre|classical_tenor genre|classical_trumpet genre|classify genre|clean_comedy genre|cleveland_metal genre|coco genre|collage_pop genre|cologne_electronic genre|cologne_hip_hop genre|cologne_indie genre|colombian_black_metal genre|colombian_electronic genre|colombian_hip_hop genre|colombian_pop genre|colombian_rock genre|comedy genre|comedy_rap genre|comedy_rock genre|comic genre|comic_metal genre|complextro genre|compositeur genre|compositional_ambient genre|concepcion_indie genre|concert_band genre|connecticut_indie genre|conscious_hip_hop genre|contemporary_classical genre|contemporary_classical_piano genre|contemporary_country genre|contemporary_folk genre|contemporary_gospel genre|contemporary_jazz genre|contemporary_post genre|contemporary_vocal_jazz genre|cool_jazz genre|copla genre|corrido genre|corridos_tumbados genre|corrosion genre|cosmic_american genre|cosmic_black_metal genre|cosmic_post genre|cosmic_uplifting_trance genre|country genre|country_blues genre|country_boogie genre|country_dawn genre|country_gospel genre|country_pop genre|country_quebecois genre|country_rap genre|country_road genre|country_rock genre|coventry_indie genre|coverchill genre|cowboy_western genre|cowpunk genre|crack_rock_steady genre|croatian_electronic genre|croatian_pop genre|croatian_rock genre|crossover_prog genre|crossover_thrash genre|crunk genre|crust_punk genre|cuarteto genre|cuatro_venezolano genre|cuban_alternative genre|cuban_rumba genre|cubaton genre|cumbia genre|cumbia_andina_mexicana genre|cumbia_chilena genre|cumbia_colombiana_regia genre|cumbia_lagunera genre|cumbia_paraguaya genre|cumbia_peruana genre|cumbia_pop genre|cumbia_ranchera genre|cumbia_salvadorena genre|cumbia_santafesina genre|cumbia_sonidera genre|cumbia_surena genre|cumbia_uruguaya genre|cumbia_villera genre|cyberpunk genre|cymraeg genre|czech_classical genre|czech_contemporary_classical genre|czech_folk genre|czech_hip_hop genre|czech_metal genre|czech_pop genre|czech_rock genre|czsk_hip_hop genre|dabke genre|dakke_dak genre|dalarna_indie genre|dance genre|dance_pop genre|dance_rock genre|dancehall genre|dangdut genre|dangdut_koplo genre|danish_alternative_rock genre|danish_classical genre|danish_electronic genre|danish_electropop genre|danish_hip_hop genre|danish_jazz genre|danish_metal genre|danish_pop genre|danish_pop_rock genre|danish_post genre|danish_punk genre|danish_rock genre|dansband genre|danseband genre|dansktop genre|danspunk genre|dark_black_metal genre|dark_cabaret genre|dark_clubbing genre|dark_electro genre|dark_hardcore genre|dark_jazz genre|dark_minimal_techno genre|dark_post genre|dark_progressive_house genre|dark_rock genre|dark_techno genre|dark_trap genre|dark_wave genre|dayton_indie genre|dc_hardcore genre|death_metal genre|deathcore genre|deathgrass genre|deathgrind genre|deathrash genre|deathrock genre|deep_adult_standards genre|deep_big_room genre|deep_brazilian_pop genre|deep_ccm genre|deep_christian_rock genre|deep_comedy genre|deep_contemporary_country genre|deep_dance_pop genre|deep_darkpsy genre|deep_deep_house genre|deep_deep_tech_house genre|deep_disco genre|deep_disco_house genre|deep_dnb genre|deep_dubstep genre|deep_east_coast_hip_hop genre|deep_euro_house genre|deep_eurodance genre|deep_free_jazz genre|deep_german_hip_hop genre|deep_german_punk genre|deep_gothic_post genre|deep_groove_house genre|deep_happy_hardcore genre|deep_house genre|deep_idm genre|deep_jazz_fusion genre|deep_latin_alternative genre|deep_latin_christian genre|deep_liquid genre|deep_minimal_techno genre|deep_new_americana genre|deep_new_wave genre|deep_pop_edm genre|deep_power genre|deep_progressive_house genre|deep_progressive_trance genre|deep_punk_rock genre|deep_r genre|deep_ragga genre|deep_regional_mexican genre|deep_smooth_jazz genre|deep_soft_rock genre|deep_soul_house genre|deep_southern_soul genre|deep_southern_trap genre|deep_talent_show genre|deep_tech_house genre|deep_techno genre|deep_tropical_house genre|deep_turkish_pop genre|deep_underground_hip_hop genre|deep_uplifting_trance genre|delta_blues genre|dembow genre|denpa genre|depressive_black_metal genre|derby_indie genre|desert_blues genre|desi_hip_hop genre|desi_pop genre|desi_trap genre|dessin_anime genre|destroy_techno genre|detroit_hip_hop genre|detroit_house genre|detroit_rock genre|detroit_techno genre|detroit_trap genre|detske_pisnicky genre|detskie_pesni genre|deutsch_disney genre|dfw_rap genre|didgeridoo genre|digital_hardcore genre|dinner_jazz genre|dirty_south_rap genre|dirty_texas_rap genre|disco genre|disco_house genre|disco_polo genre|disco_soul genre|discofox genre|disney genre|diva_house genre|division genre|dixieland genre|diy_emo genre|djent genre|dmv_rap genre|dominican_pop genre|doo genre|doom_metal genre|doomcore genre|dortmund_indie genre|double_drumming genre|downtempo genre|downtempo_bass genre|dream_pop genre|dream_trance genre|dreamgaze genre|dreamo genre|drift genre|drill genre|drill_and_bass genre|drill_francais genre|driving_country genre|drone genre|drone_ambient genre|drone_folk genre|drone_metal genre|drone_rock genre|drum_and_bass genre|drumfunk genre|dub genre|dub_poetry genre|dub_punk genre|dub_reggae genre|dub_techno genre|dubstep genre|dubsteppe genre|duduk genre|duluth_indie genre|dundee_indie genre|dunedin_indie genre|dunedin_sound genre|dungeon_synth genre|duranguense genre|dusseldorf_electronic genre|dutch_cabaret genre|dutch_classical_piano genre|dutch_drill genre|dutch_edm genre|dutch_folk genre|dutch_hip_hop genre|dutch_house genre|dutch_indie genre|dutch_indie_rock genre|dutch_jazz genre|dutch_metal genre|dutch_pop genre|dutch_prog genre|dutch_rap_pop genre|dutch_rock genre|dutch_tech_house genre|dutch_trance genre|dutch_trap genre|early_american_folk genre|early_avant_garde genre|early_modern_classical genre|early_music genre|early_music_choir genre|early_music_ensemble genre|early_reggae genre|early_romantic_era genre|early_synthpop genre|early_us_punk genre|east_coast_hip_hop genre|east_coast_reggae genre|eastern_bloc_groove genre|easy_listening genre|easycore genre|eau_claire_indie genre|ebm genre|ecm genre|ectofolk genre|ecuadorian_pop genre|edm genre|edmonton_indie genre|egyptian_pop genre|egyptian_traditional genre|el_paso_indie genre|electra genre|electric_bass genre|electric_blues genre|electro genre|electro_house genre|electro_jazz genre|electro_latino genre|electro_swing genre|electroclash genre|electronic_djent genre|electronic_rock genre|electronic_trap genre|electronica genre|electronica_argentina genre|electropop genre|electropowerpop genre|elephant_6 genre|emo genre|emo_mexicano genre|emo_punk genre|emo_rap genre|emo_rap_italiano genre|emocore genre|english_baroque genre|english_indie_rock genre|english_renaissance genre|enredo genre|entehno genre|environmental genre|epic_doom genre|epicore genre|erhu genre|escape_room genre|estonian_hip_hop genre|estonian_metal genre|estonian_pop genre|estonian_rock genre|ethereal_wave genre|etherpop genre|ethio genre|ethnomusicology genre|ethnotronica genre|eugene_indie genre|euphoric_hardstyle genre|eurobeat genre|eurodance genre|europop genre|euroska genre|eurovision genre|euskal_musica genre|euskal_rock genre|exotica genre|experimental genre|experimental_ambient genre|experimental_dubstep genre|experimental_electronic genre|experimental_guitar genre|experimental_hip_hop genre|experimental_jazz genre|experimental_pop genre|experimental_r genre|experimental_rock genre|experimental_vocal genre|fado genre|fake genre|family_gospel genre|faroese_pop genre|fi genre|fi_beats genre|fi_brasileiro genre|fi_chill genre|fi_emo genre|fi_house genre|fi_indie genre|fidget_house genre|fijian_pop genre|filmi genre|filter_house genre|fingerstyle genre|finnish_alternative_rock genre|finnish_blues genre|finnish_classical genre|finnish_contemporary_classical genre|finnish_dance_pop genre|finnish_death_metal genre|finnish_doom_metal genre|finnish_edm genre|finnish_hard_rock genre|finnish_heavy_metal genre|finnish_hip_hop genre|finnish_indie genre|finnish_melodeath genre|finnish_metal genre|finnish_new_wave genre|finnish_pop genre|finnish_pop_punk genre|finnish_post genre|finnish_power_metal genre|finnish_progressive_rock genre|finnish_psychedelic_rock genre|finnish_punk genre|finnish_reggae genre|finnish_trap genre|firenze_indie genre|flamenco genre|flamenco_fusion genre|flamenco_guitar genre|flamenco_urbano genre|flint_hip_hop genre|float_house genre|florida_death_metal genre|florida_rap genre|flute_rock genre|fo_jing genre|focus genre|focus_beats genre|focus_trance genre|folclor_afrocolombiano genre|folclor_colombiano genre|folclore_jujeno genre|folclore_salteno genre|folclore_santiagueno genre|folclore_tucumano genre|folk genre|folk_brasileiro genre|folk_metal genre|folk_punk genre|folk_rock genre|folk_rock_italiano genre|folklore_argentino genre|folklore_boliviano genre|folklore_chileno genre|folklore_ecuatoriano genre|folklore_peruano genre|folklore_uruguayo genre|folkmusik genre|folktronica genre|forana genre|forest_psy genre|forro genre|forro_de_favela genre|forro_instrumental genre|forro_tradicional genre|fourth_world genre|francoton genre|frankfurt_electronic genre|frauenrap genre|freak_folk genre|freakbeat genre|free_improvisation genre|free_jazz genre|freestyle genre|french_baroque genre|french_classical_piano genre|french_dnb genre|french_folk_pop genre|french_garage_rock genre|french_hardcore genre|french_hip_hop genre|french_indie_folk genre|french_indie_pop genre|french_indietronica genre|french_jazz genre|french_metal genre|french_movie_tunes genre|french_oi genre|french_opera genre|french_orchestra genre|french_pop genre|french_post genre|french_punk genre|french_reggae genre|french_rock genre|french_romanticism genre|french_shoegaze genre|french_soundtrack genre|french_synthpop genre|french_tech_house genre|french_techno genre|frenchcore genre|full_on genre|funana genre|funeral_doom genre|funk genre|funk_bh genre|funk_carioca genre|funk_consciente genre|funk_das_antigas genre|funk_melody genre|funk_metal genre|funk_mexicano genre|funk_ostentacao genre|funk_paulista genre|funk_pop genre|funk_rock genre|funky_breaks genre|funky_house genre|funky_tech_house genre|future_bass genre|future_funk genre|future_garage genre|future_house genre|future_rock genre|futurepop genre|g_funk genre|gabba genre|gaian_doom genre|gainesville_indie genre|galante_era genre|galego genre|galician_rock genre|gambian_pop genre|gaming_dubstep genre|gaming_edm genre|gangster_rap genre|garage_house genre|garage_pop genre|garage_psych genre|garage_punk genre|garage_rock genre|garage_rock_revival genre|garde genre|garde_jazz genre|gauze_pop genre|gbvfi genre|geek_rock genre|georgian_electronic genre|german_alternative_rap genre|german_alternative_rock genre|german_baroque genre|german_black_metal genre|german_choir genre|german_classical_piano genre|german_cloud_rap genre|german_country genre|german_dance genre|german_dark_minimal_techno genre|german_death_metal genre|german_dnb genre|german_drill genre|german_electronica genre|german_hard_rock genre|german_heavy_metal genre|german_hip_hop genre|german_house genre|german_indie genre|german_indie_folk genre|german_jazz genre|german_literature genre|german_metal genre|german_metalcore genre|german_modernism genre|german_oi genre|german_opera genre|german_orchestra genre|german_pop genre|german_pop_rock genre|german_power_metal genre|german_punk genre|german_punk_rock genre|german_reggae genre|german_rock genre|german_romanticism genre|german_shoegaze genre|german_show_tunes genre|german_singer genre|german_ska genre|german_soundtrack genre|german_tech_house genre|german_techno genre|german_thrash_metal genre|german_trance genre|german_trap genre|german_underground_rap genre|ghazal genre|ghent_indie genre|ghettotech genre|girl_group genre|glam_metal genre|glam_punk genre|glam_rock genre|glee_club genre|glitch genre|glitch_hop genre|glitch_pop genre|glitchcore genre|go genre|goa_trance genre|gospel genre|gospel_antigas genre|gospel_blues genre|gospel_r genre|gospel_singers genre|gospel_soul genre|gothabilly genre|gothenburg_indie genre|gothenburg_metal genre|gothic_alternative genre|gothic_americana genre|gothic_metal genre|gothic_post genre|gothic_rock genre|gothic_symphonic_metal genre|gqom genre|grand_rapids_indie genre|grave_wave genre|grebo genre|greek_clarinet genre|greek_contemporary_classical genre|greek_folk genre|greek_guitar genre|greek_house genre|greek_indie genre|greek_pop genre|greek_psychedelic_rock genre|greek_swing genre|greek_underground_rap genre|greenlandic_pop genre|grime genre|grindcore genre|griot genre|groove_gospel genre|groove_metal genre|groove_room genre|grunge genre|grunge_pop genre|grupera genre|gruperas_inmortales genre|guadalajara_indie genre|guam_indie genre|guaracha genre|guatemalan_pop genre|guinean_pop genre|guitarra_clasica genre|gujarati_pop genre|gurdy genre|gymcore genre|gypsy_jazz genre|h8000 genre|haitian_traditional genre|halftime_dnb genre|hamburg_electronic genre|hamburg_hip_hop genre|hamburger_schule genre|hammond_organ genre|hands_up genre|hangoskonyvek genre|happy_hardcore genre|hard_alternative genre|hard_bop genre|hard_dance genre|hard_glam genre|hard_house genre|hard_minimal_techno genre|hard_rock genre|hard_rock_brasileiro genre|hard_rock_mexicano genre|hard_stoner_rock genre|hard_trance genre|hardcore genre|hardcore_hip_hop genre|hardcore_punk genre|hardcore_techno genre|hardstyle genre|harlem_hip_hop genre|harlem_renaissance genre|harmonica_blues genre|harmonica_jazz genre|harp genre|harpsichord genre|hawaiian genre|hawaiian_hip_hop genre|healing genre|heartland_rock genre|hi genre|highlife genre|hindi_hip_hop genre|hindi_indie genre|hindustani_classical genre|hindustani_instrumental genre|hindustani_vocal genre|hip_hop genre|hip_hop_cubano genre|hip_hop_quebecois genre|hip_hop_tuga genre|hip_house genre|hip_pop genre|historic_classical_performance genre|historic_orchestral_performance genre|historic_piano_performance genre|historic_string_quartet genre|historically_informed_performance genre|hoerspiel genre|hokkaido_indie genre|hokkien_pop genre|hollywood genre|hong_kong_indie genre|hong_kong_rock genre|honky genre|honky_tonk genre|hopebeat genre|horror_punk genre|horrorcore genre|house genre|houston_rap genre|huayno genre|huayno_popular genre|hula genre|humppa genre|hungarian_choir genre|hungarian_classical_performance genre|hungarian_classical_piano genre|hungarian_contemporary_classical genre|hungarian_pop genre|hungarian_rock genre|hungarian_techno genre|hurdy genre|hyperpop genre|hyphy genre|icelandic_electronic genre|icelandic_experimental genre|icelandic_hip_hop genre|icelandic_indie genre|icelandic_jazz genre|icelandic_pop genre|icelandic_rock genre|idaho_indie genre|idol genre|idol_kayo genre|idol_rock genre|ilocano_pop genre|impressionism genre|indian_classical genre|indian_edm genre|indian_folk genre|indian_fusion genre|indian_indie genre|indian_instrumental genre|indian_jazz genre|indian_rock genre|indian_singer genre|indian_underground_rap genre|indian_violin genre|indie genre|indie_anthem genre|indie_cafe_pop genre|indie_catala genre|indie_curitibano genre|indie_dream_pop genre|indie_electropop genre|indie_extremena genre|indie_folk genre|indie_folk_italiano genre|indie_game_soundtrack genre|indie_garage_rock genre|indie_hip_hop genre|indie_jazz genre|indie_napoletano genre|indie_nica genre|indie_platense genre|indie_poblano genre|indie_pop genre|indie_pop_rap genre|indie_poptimism genre|indie_psych genre|indie_punk genre|indie_quebecois genre|indie_r genre|indie_rock genre|indie_rock_italiano genre|indie_rock_mexicano genre|indie_rock_peruano genre|indie_rockism genre|indie_siciliano genre|indie_soul genre|indie_surf genre|indie_triste genre|indie_veneto genre|indie_viet genre|indiecoustica genre|indietronica genre|indonesian_alternative_rock genre|indonesian_city_pop genre|indonesian_death_metal genre|indonesian_deathcore genre|indonesian_edm genre|indonesian_folk genre|indonesian_folk_pop genre|indonesian_hip_hop genre|indonesian_idol_pop genre|indonesian_indie genre|indonesian_indie_rock genre|indonesian_jazz genre|indonesian_metal genre|indonesian_pop genre|indonesian_pop_punk genre|indonesian_post genre|indonesian_psychedelia genre|indonesian_r genre|indonesian_rock genre|indonesian_worship genre|industrial genre|industrial_hardcore genre|industrial_hip_hop genre|industrial_metal genre|industrial_rock genre|industrial_techno genre|indy_indie genre|instrumental_bluegrass genre|instrumental_funk genre|instrumental_grime genre|instrumental_post genre|instrumental_rock genre|instrumental_soul genre|instrumental_surf genre|intelligent_dance_music genre|interprete_quebecois genre|iowa_indie genre|irish_classical genre|irish_country genre|irish_drill genre|irish_electronic genre|irish_experimental_electronic genre|irish_folk genre|irish_hip_hop genre|irish_indie genre|irish_pop genre|irish_pub_song genre|irish_rock genre|irish_singer genre|iskelma genre|islamic_recitation genre|israeli_classical_piano genre|israeli_hip_hop genre|israeli_indie genre|israeli_pop genre|israeli_rock genre|israeli_singer genre|israeli_techno genre|italian_adult_pop genre|italian_alternative genre|italian_baritone genre|italian_baroque genre|italian_baroque_ensemble genre|italian_bass genre|italian_black_metal genre|italian_classical_piano genre|italian_contemporary_jazz genre|italian_death_metal genre|italian_disco genre|italian_doom_metal genre|italian_folk genre|italian_hip_hop genre|italian_indie_pop genre|italian_jazz genre|italian_jazz_fusion genre|italian_lounge genre|italian_metal genre|italian_mezzo genre|italian_modern_prog genre|italian_new_wave genre|italian_opera genre|italian_orchestra genre|italian_pop genre|italian_pop_punk genre|italian_pop_rock genre|italian_post_punk genre|italian_power_metal genre|italian_progressive_rock genre|italian_punk genre|italian_reggae genre|italian_romanticism genre|italian_ska genre|italian_soprano genre|italian_soundtrack genre|italian_tech_house genre|italian_techno genre|italian_tenor genre|italian_trance genre|italian_underground_hip_hop genre|italian_violin genre|italo_dance genre|italo_house genre|jacksonville_indie genre|jam_band genre|jamgrass genre|jangle_pop genre|japanese_blues genre|japanese_celtic genre|japanese_chill_rap genre|japanese_chillhop genre|japanese_classical genre|japanese_classical_performance genre|japanese_classical_piano genre|japanese_concert_band genre|japanese_contemporary_classical genre|japanese_dance_pop genre|japanese_dream_pop genre|japanese_edm genre|japanese_electropop genre|japanese_emo genre|japanese_experimental genre|japanese_folk genre|japanese_guitar genre|japanese_heavy_metal genre|japanese_house genre|japanese_indie_pop genre|japanese_indie_rock genre|japanese_instrumental genre|japanese_jazz genre|japanese_jazz_fusion genre|japanese_jazztronica genre|japanese_metalcore genre|japanese_new_wave genre|japanese_old_school_hip_hop genre|japanese_pop_punk genre|japanese_post genre|japanese_power_metal genre|japanese_psychedelic genre|japanese_psychedelic_rock genre|japanese_punk_rock genre|japanese_r genre|japanese_rockabilly genre|japanese_shoegaze genre|japanese_singer genre|japanese_soul genre|japanese_soundtrack genre|japanese_techno genre|japanese_teen_pop genre|japanese_vgm genre|japanese_vocal_jazz genre|jawaiian genre|jazz genre|jazz_accordion genre|jazz_blues genre|jazz_boom_bap genre|jazz_brass genre|jazz_chileno genre|jazz_clarinet genre|jazz_cubano genre|jazz_double_bass genre|jazz_drums genre|jazz_flute genre|jazz_funk genre|jazz_fusion genre|jazz_guitar genre|jazz_harp genre|jazz_metal genre|jazz_mexicano genre|jazz_orchestra genre|jazz_organ genre|jazz_piano genre|jazz_pop genre|jazz_quartet genre|jazz_rap genre|jazz_rock genre|jazz_saxophone genre|jazz_trio genre|jazz_trombone genre|jazz_trumpet genre|jazz_vibraphone genre|jazz_violin genre|jazztronica genre|jewish_a_capella genre|jewish_cantorial genre|jewish_hip_hop genre|jewish_pop genre|jig_and_reel genre|jordanian_pop genre|jovem_guarda genre|judaica genre|jug_band genre|jump_blues genre|jump_up genre|jumpstyle genre|jumptek genre|jungle genre|junior_songfestival genre|kabarett genre|kabyle genre|kaneka genre|kansas_city_hip_hop genre|karadeniz_pop genre|karadeniz_turkuleri genre|karneval genre|kavkaz genre|kawaii_future_bass genre|kawaii_metal genre|kayokyoku genre|kazakh_pop genre|kei genre|kent_indie genre|kentucky_hip_hop genre|kentucky_indie genre|kentucky_mountain_folk genre|kentucky_roots genre|keroncong genre|key_guitar genre|kids_dance_party genre|kindermusik genre|kindie_rock genre|kingston_on_indie genre|kirtan genre|kiwi_rock genre|kizomba_antigas genre|kleine_hoerspiel genre|klezmer genre|kollywood genre|kolsche_karneval genre|komedi genre|kompa genre|korean_classical_performance genre|korean_classical_piano genre|korean_electropop genre|korean_indie_rock genre|korean_instrumental genre|korean_mask_singer genre|korean_old_school_hip_hop genre|korean_ost genre|korean_pop genre|korean_r genre|korean_singer genre|kraut genre|krautrock genre|kundalini genre|kundiman genre|la_indie genre|la_pop genre|laboratorio genre|lagu_sunda genre|laiko genre|late_romantic_era genre|latin genre|latin_afrobeat genre|latin_alternative genre|latin_american_classical_piano genre|latin_arena_pop genre|latin_christian genre|latin_classical genre|latin_funk genre|latin_hip_hop genre|latin_house genre|latin_jazz genre|latin_metal genre|latin_pop genre|latin_rock genre|latin_ska genre|latin_soundtrack genre|latin_talent_show genre|latin_tech_house genre|latin_viral_pop genre|latin_worship genre|latincore genre|latintronica genre|latinx_alternative genre|latvian_hip_hop genre|latvian_indie genre|latvian_pop genre|lds genre|lds_youth genre|lebanese_pop genre|leicester_indie genre|leipzig_electronic genre|levenslied genre|lgbtq genre|library_music genre|liedermacher genre|light_music genre|lilith genre|liquid_funk genre|lithuanian_edm genre|lithuanian_electronic genre|lithuanian_pop genre|liverpool_indie genre|livetronica genre|lldm genre|lo genre|london_rap genre|long_island_punk genre|louisiana_blues genre|louisiana_metal genre|louisville_indie genre|louisville_underground genre|lounge genre|lounge_house genre|lovers_rock genre|lowlands_hardcore genre|lullaby genre|macedonian_folk genre|madchester genre|madrigal genre|magyar_alternative genre|maine_hip_hop genre|mainland_chinese_pop genre|makossa genre|malayalam_pop genre|malaysian_hip_hop genre|malaysian_indie genre|malaysian_mandopop genre|malaysian_pop genre|malian_blues genre|malian_traditional genre|maltese_pop genre|mambo genre|mande_pop genre|mandolin genre|mandopop genre|manele genre|manguebeat genre|manila_sound genre|mantra genre|marathi_pop genre|marathi_traditional genre|marching_band genre|mariachi genre|mariachi_cristiano genre|marimba_mexicana genre|marimba_orquesta genre|martial_industrial genre|mashup genre|math_rock genre|mathcore genre|mathgrind genre|mbalax genre|medieval_folk genre|medieval_rock genre|meditation genre|melancholia genre|melbourne_bounce genre|melbourne_bounce_international genre|mellow_gold genre|melodic_black_metal genre|melodic_death_metal genre|melodic_dubstep genre|melodic_groove_metal genre|melodic_hard_rock genre|melodic_hardcore genre|melodic_metal genre|melodic_metalcore genre|melodic_rap genre|melodic_techno genre|melodic_thrash genre|melodipop genre|meme_rap genre|memphis_blues genre|memphis_hip_hop genre|memphis_soul genre|mento genre|merengue genre|merengue_tipico genre|merida_indie genre|merseybeat genre|messianic_praise genre|metal genre|metal_catarinense genre|metal_ecuatoriano genre|metal_guitar genre|metal_mineiro genre|metal_paranaense genre|metalcore genre|metallic_hardcore genre|metropopolis genre|mex genre|mexican_classic_rock genre|mexican_edm genre|mexican_hip_hop genre|mexican_indie genre|mexican_metal genre|mexican_pop genre|mexican_pop_punk genre|mexican_power_metal genre|mexican_rock genre|mexican_traditional genre|mgp genre|miami_bass genre|miami_hip_hop genre|miami_indie genre|miami_metal genre|microhouse genre|microtonal genre|middle_earth genre|midwest_americana genre|midwest_emo genre|milan_indie genre|military_band genre|military_rap genre|minecraft genre|minimal_dub genre|minimal_melodic_techno genre|minimal_tech_house genre|minimal_techno genre|minimal_wave genre|minimalism genre|minneapolis_sound genre|minnesota_hip_hop genre|mississippi_hip_hop genre|mizrahi genre|mod_revival genre|modern_alternative_pop genre|modern_alternative_rock genre|modern_big_band genre|modern_blues genre|modern_blues_rock genre|modern_bollywood genre|modern_cello genre|modern_country_rock genre|modern_dream_pop genre|modern_folk_rock genre|modern_funk genre|modern_hard_rock genre|modern_indie_pop genre|modern_jazz_piano genre|modern_jazz_trio genre|modern_old genre|modern_performance genre|modern_power_pop genre|modern_progressive_rock genre|modern_reggae genre|modern_rock genre|modern_salsa genre|modern_ska_punk genre|modern_southern_rock genre|modern_string_quartet genre|modern_swing genre|modern_uplift genre|modular_techno genre|moldovan_pop genre|mollywood genre|montreal_indie genre|moog genre|moombahton genre|morelos_indie genre|morna genre|moroccan_pop genre|motown genre|mountain_dulcimer genre|movie_tunes genre|mpb genre|mpb_gospel genre|multidisciplinary genre|mundart genre|munich_electronic genre|musette genre|music_hall genre|musica_afroperuana genre|musica_alagoana genre|musica_andina genre|musica_andina_colombiana genre|musica_andorra genre|musica_antigua genre|musica_aragonesa genre|musica_ayacuchana genre|musica_cabo genre|musica_calabrese genre|musica_canaria genre|musica_catalana genre|musica_catarinense genre|musica_cearense genre|musica_costena genre|musica_de_fondo genre|musica_etnica genre|musica_gaucha_tradicionalista genre|musica_hondurena genre|musica_indigena_mexicana genre|musica_infantil genre|musica_juiz genre|musica_llanera genre|musica_lombarda genre|musica_maranhense genre|musica_nicaraguense genre|musica_para_criancas genre|musica_para_ninos genre|musica_paraibana genre|musica_popular_amazonense genre|musica_popular_colombiana genre|musica_popular_mineira genre|musica_popular_paraense genre|musica_popular_uruguaya genre|musica_portuguesa_contemporanea genre|musica_potosina genre|musica_purepecha genre|musica_tradicional_cubana genre|musica_triste_brasileira genre|musica_yucateca genre|musical_advocacy genre|musik_anak genre|musique_guadeloupe genre|musique_mandingue genre|musique_mariage_algerien genre|musique_peule genre|musique_pour_enfant_quebecois genre|musique_pour_enfants genre|muziek_voor_kinderen genre|música_pitiusa genre|naija_worship genre|nantes_indie genre|narodna_muzika genre|nashville_hip_hop genre|nashville_indie genre|nashville_singer genre|nashville_sound genre|native_american genre|native_american_contemporary genre|native_american_flute genre|navajo genre|neapolitan_funk genre|nederlandse_hardstyle genre|nederpop genre|neo genre|neo_classical_metal genre|neo_kyma genre|neo_mellow genre|neo_r genre|neo_soul genre|neoclassical_darkwave genre|neoclassicism genre|neofolk genre|neon_pop_punk genre|nepali_indie genre|nerdcore genre|nerdcore_brasileiro genre|neue_deutsche_harte genre|neue_deutsche_todeskunst genre|neue_deutsche_welle genre|neurofunk genre|new_age genre|new_age_piano genre|new_americana genre|new_beat genre|new_comedy genre|new_french_touch genre|new_isolationism genre|new_jack_swing genre|new_jersey_hardcore genre|new_jersey_indie genre|new_jersey_punk genre|new_jersey_rap genre|new_mexico_music genre|new_orleans_blues genre|new_orleans_funk genre|new_orleans_indie genre|new_orleans_jazz genre|new_orleans_rap genre|new_rave genre|new_romantic genre|new_tribe genre|new_wave genre|new_wave_of_speed_metal genre|new_wave_of_thrash_metal genre|new_wave_pop genre|new_weird_america genre|new_york_drill genre|newcastle_indie genre|newcastle_nsw_indie genre|nigerian_hip_hop genre|nigerian_pop genre|nightcore genre|nightrun genre|ninja genre|nintendocore genre|nisiotika genre|nl_folk genre|no_wave genre|noise_pop genre|noise_rock genre|nordic_ambient genre|nordic_classical_piano genre|nordic_contemporary_classical genre|nordic_folk genre|nordic_folk_metal genre|nordic_house genre|nordic_orchestra genre|nordic_post genre|nordic_soundtrack genre|nordnorsk_musikk genre|norrlandsk_hip_hop genre|norske_viser genre|norteno genre|north_carolina_hip_hop genre|north_carolina_indie genre|north_carolina_metal genre|north_carolina_roots genre|north_dakota_indie genre|northern_irish_indie genre|northern_irish_punk genre|northern_soul genre|norwegian_black_metal genre|norwegian_classical genre|norwegian_contemporary_jazz genre|norwegian_country genre|norwegian_death_metal genre|norwegian_experimental genre|norwegian_folk_rock genre|norwegian_hip_hop genre|norwegian_house genre|norwegian_indie genre|norwegian_jazz genre|norwegian_metal genre|norwegian_pop genre|norwegian_pop_rap genre|norwegian_prog genre|norwegian_rock genre|norwegian_singer genre|nottingham_indie genre|nouvelle_chanson_francaise genre|nova_canco genre|nova_mpb genre|nova_musica_carioca genre|nova_musica_pernambucana genre|novelty genre|novo_rock_gaucho genre|nrg genre|nu genre|nu_age genre|nu_disco genre|nu_gaze genre|nu_jazz genre|nu_metal genre|nu_skool_breaks genre|nubian_traditional genre|nueva_cancion genre|nueva_ola_chilena genre|nuevo_flamenco genre|nuevo_folklore_mexicano genre|nuevo_regional_mexicano genre|nuevo_tango genre|nursery genre|nwobhm genre|nwocr genre|nwothm genre|nyc_pop genre|nyc_rap genre|nyhc genre|nz_hip_hop genre|nz_indie genre|nz_pop genre|nz_reggae genre|nz_singer genre|oakland_hip_hop genre|oakland_indie genre|oceania_soundtrack genre|odia_bhajan genre|ohio_hip_hop genre|ohio_indie genre|oi genre|okc_indie genre|okinawan_folk genre|okinawan_pop genre|oklahoma_country genre|oktoberfest genre|old genre|old_school_dancehall genre|old_school_hard_trance genre|old_school_hip_hop genre|old_school_rap_francais genre|old_school_thrash genre|old_school_uk_hip_hop genre|olympia_wa_indie genre|omaha_indie genre|ontario_indie genre|opera genre|opera_chorus genre|opera_metal genre|operatic_pop genre|operetta genre|opm genre|orchestra genre|orchestral_performance genre|organic_electronic genre|organic_house genre|orgcore genre|orlando_indie genre|orquesta_tipica genre|orthodox_chant genre|oshare_kei genre|ostrock genre|otacore genre|ottawa_rap genre|oud genre|oulu_indie genre|oulu_metal genre|outlaw_country genre|outsider genre|outsider_house genre|oxford_choir genre|oxford_indie genre|oyun_havasi genre|p_funk genre|pagan_black_metal genre|pagode genre|pagode_baiano genre|pagode_novo genre|paisley_underground genre|pakistani_folk genre|pakistani_hip_hop genre|pakistani_pop genre|palm_desert_scene genre|panamanian_pop genre|panpipe genre|papuri genre|parody genre|partido_alto genre|partyschlager genre|permanent_wave genre|perreo genre|persian_electronic genre|persian_pop genre|perth_indie genre|peruvian_hip_hop genre|peruvian_indie genre|peruvian_rock genre|philly_indie genre|philly_rap genre|philly_soul genre|phonk genre|piano_blues genre|piano_cover genre|piano_rock genre|piedmont_blues genre|pinoy_alternative_rap genre|pinoy_hip_hop genre|pinoy_indie genre|pinoy_metal genre|pinoy_pop_punk genre|pinoy_praise genre|pinoy_r genre|pinoy_reggae genre|pinoy_rock genre|pinoy_trap genre|pirate genre|piseiro genre|pittsburgh_indie genre|pittsburgh_rap genre|pittsburgh_rock genre|pixie genre|plena_uruguaya genre|png_pop genre|poetry genre|poezja_spiewana genre|pokemon genre|polca_paraguaya genre|polish_alternative genre|polish_alternative_rock genre|polish_blues genre|polish_classical genre|polish_classical_piano genre|polish_contemporary_classical genre|polish_death_metal genre|polish_folk genre|polish_hip_hop genre|polish_indie genre|polish_indie_rock genre|polish_metal genre|polish_pop genre|polish_post genre|polish_prog genre|polish_punk genre|polish_reggae genre|polish_rock genre|polish_thrash_metal genre|polish_trap genre|political_hip_hop genre|polka genre|polynesian_hip_hop genre|polynesian_pop genre|polynesian_traditional genre|polyphony genre|pop genre|pop_ambient genre|pop_argentino genre|pop_boy_group genre|pop_chileno genre|pop_dance genre|pop_edm genre|pop_electronico genre|pop_emo genre|pop_flamenco genre|pop_folk genre|pop_francais genre|pop_girl_group genre|pop_house genre|pop_lgbtq genre|pop_nacional genre|pop_nacional_antigas genre|pop_peruano genre|pop_punk genre|pop_quebecois genre|pop_r genre|pop_rap genre|pop_rap_brasileiro genre|pop_reggaeton genre|pop_rock genre|pop_rock_brasileiro genre|pop_romantico genre|pop_soul genre|pop_teen_brasileiro genre|pop_urbaine genre|pop_venezolano genre|pop_violin genre|pop_virale_italiano genre|popgaze genre|popping genre|poprock genre|pops_orchestra genre|porro genre|portland_hip_hop genre|portland_indie genre|portland_punk genre|portuguese_death_metal genre|portuguese_indie genre|portuguese_metal genre|portuguese_pop genre|portuguese_post genre|portuguese_rock genre|post genre|power genre|power_electronics genre|power_metal genre|power_noise genre|power_pop genre|power_thrash genre|powerviolence genre|praise genre|prepared_piano genre|preschool_children genre|prog_metal genre|prog_quebec genre|progressive genre|progressive_alternative genre|progressive_bluegrass genre|progressive_breaks genre|progressive_death_metal genre|progressive_deathcore genre|progressive_doom genre|progressive_electro_house genre|progressive_groove_metal genre|progressive_house genre|progressive_jazz_fusion genre|progressive_metal genre|progressive_post genre|progressive_power_metal genre|progressive_psytrance genre|progressive_rock genre|progressive_sludge genre|progressive_trance genre|progressive_trance_house genre|progressive_uplifting_trance genre|protest_folk genre|proto genre|protopunk genre|psicodelia_brasileira genre|psych_gaze genre|psychedelic genre|psychedelic_blues genre|psychedelic_folk genre|psychedelic_folk_rock genre|psychedelic_hip_hop genre|psychedelic_pop genre|psychedelic_punk genre|psychedelic_rock genre|psychedelic_soul genre|psychedelic_trance genre|psychill genre|psychobilly genre|pub_rock genre|puerto_rican_folk genre|puerto_rican_pop genre|puerto_rican_rock genre|punjabi_pop genre|punk genre|punk_argentina genre|punk_blues genre|punk_chileno genre|punk_euskera genre|punk_galego genre|punk_rock_mexicano genre|punk_tuga genre|punk_urbano genre|punta genre|punta_rock genre|qawwali genre|quebec_indie genre|quebec_punk genre|queens_hip_hop genre|queer_country genre|queercore genre|quiet_storm genre|quran genre|rabindra_sangeet genre|radio_symphony genre|ragga_jungle genre|ragtime genre|rai genre|ranchera genre|rap genre|rap_abc_paulista genre|rap_angolano genre|rap_antillais genre|rap_baixada_fluminense genre|rap_boricua genre|rap_catala genre|rap_cearense genre|rap_chileno genre|rap_conciencia genre|rap_conscient genre|rap_cristao genre|rap_cristiano genre|rap_df genre|rap_dominicano genre|rap_espanol genre|rap_feminino_nacional genre|rap_francais genre|rap_galego genre|rap_inde genre|rap_kreyol genre|rap_latina genre|rap_maroc genre|rap_marseille genre|rap_metal genre|rap_montrealais genre|rap_nacional_antigo genre|rap_napoletano genre|rap_portuense genre|rap_rock genre|rap_sardegna genre|rap_underground_colombiano genre|rap_underground_espanol genre|rap_underground_mexicano genre|rare_groove genre|rautalanka genre|rave genre|rave_funk genre|raw_techno genre|rawstyle genre|re genre|reading genre|reading_indie genre|rebel_blues genre|rebetiko genre|recorder genre|red_dirt genre|redneck genre|reggae genre|reggae_cristao genre|reggae_en_espanol genre|reggae_fusion genre|reggae_gaucho genre|reggae_maghreb genre|reggae_mexicano genre|reggae_rock genre|reggae_tuga genre|reggaeton genre|reggaeton_colombiano genre|reggaeton_cristiano genre|reggaeton_flow genre|reggaeton_mexicano genre|regional_mexican genre|relaxative genre|renaissance genre|rennes_indie genre|retro_metal genre|retro_soul genre|reunion_pop genre|rhode_island_indie genre|rhode_island_rap genre|rhythm_and_blues genre|rhythm_game genre|riddim genre|riddim_dubstep genre|rif genre|riot_grrrl genre|ritmo_kombina genre|rochester_mn_indie genre|rochester_ny_indie genre|rock genre|rock_alternativo_brasileiro genre|rock_alternativo_espanol genre|rock_andaluz genre|rock_baiano genre|rock_brasiliense genre|rock_catala genre|rock_chapin genre|rock_cristiano genre|rock_curitibano genre|rock_dominicano genre|rock_drums genre|rock_en_espanol genre|rock_gaucho genre|rock_goiano genre|rock_gospel_brasileiro genre|rock_independant_francais genre|rock_kapak genre|rock_keyboard genre|rock_mineiro genre|rock_nacional genre|rock_nacional_brasileiro genre|rock_of_gibraltar genre|rock_piauiense genre|rock_progressif_francais genre|rock_quebecois genre|rock_steady genre|rock_urbano_mexicano genre|rock_uruguayo genre|rockabilly genre|rockabilly_en_espanol genre|roda_de_samba genre|rogaland_musikk genre|roll genre|romanian_classical_piano genre|romanian_folk genre|romanian_pop genre|romanian_rap genre|romanian_rock genre|romanian_trap genre|romantic_era genre|romantico genre|rome_indie genre|roots_americana genre|roots_reggae genre|roots_rock genre|roots_worship genre|rosary genre|rumba genre|rumba_catalana genre|rumba_congolaise genre|rune_folk genre|russelater genre|russian_alternative_rock genre|russian_ccm genre|russian_chanson genre|russian_classical_piano genre|russian_dance genre|russian_dance_pop genre|russian_edm genre|russian_folk genre|russian_folk_rock genre|russian_gangster_rap genre|russian_hardcore genre|russian_heavy_metal genre|russian_hip_hop genre|russian_indie genre|russian_jazz genre|russian_metal genre|russian_modern_classical genre|russian_orchestra genre|russian_pop genre|russian_pop_punk genre|russian_post genre|russian_punk genre|russian_punk_rock genre|russian_rave genre|russian_rock genre|russian_romance genre|russian_romanticism genre|russian_ska genre|russian_trance genre|russian_trap genre|ryukyu_ongaku genre|s_choir genre|s_folk genre|s_music genre|sacramento_hip_hop genre|sacramento_indie genre|sacred_steel genre|sad_rap genre|salsa genre|salsa_choke genre|salsa_colombiana genre|salsa_cristiana genre|salsa_cubana genre|salsa_international genre|salsa_peruana genre|salsa_puertorriquena genre|salsa_venezolana genre|samba genre|samba_de_roda genre|samba_moderno genre|samba_paulista genre|samba_reggae genre|sambass genre|samoan_pop genre|san_diego_indie genre|san_diego_rap genre|san_marcos_tx_indie genre|sanfona genre|santa_fe_indie genre|saskatchewan_indie genre|sax genre|scam_rap genre|scandinavian_r genre|scandipop genre|schlager genre|schranz genre|schweizer_rap genre|scorecore genre|scottish_electronic genre|scottish_folk genre|scottish_hip_hop genre|scottish_indie genre|scottish_indie_folk genre|scottish_indie_rock genre|scottish_jazz genre|scottish_new_wave genre|scottish_rock genre|scottish_singer genre|scratch genre|screamo genre|seattle_hip_hop genre|seattle_indie genre|seattle_metal genre|second_line genre|seiyu genre|senegalese_traditional genre|serbian_electronic genre|serbian_hip_hop genre|serialism genre|sertanejo genre|sertanejo_pop genre|sertanejo_tradicional genre|sertanejo_universitario genre|sevdah genre|sevillanas genre|shakuhachi genre|shamanic genre|shanty genre|shantykoren genre|sheffield_indie genre|shibuya genre|shimmer_pop genre|shimmer_psych genre|shiver_pop genre|shoegaze genre|shonen genre|show_tunes genre|shred genre|sierreno genre|singaporean_mandopop genre|singaporean_pop genre|singaporean_singer genre|singer genre|sinhala_pop genre|sinhala_rap genre|sinogaze genre|ska genre|ska_argentino genre|ska_catala genre|ska_chileno genre|ska_jazz genre|ska_mexicano genre|ska_punk genre|ska_revival genre|skansk_musik genre|skate_punk genre|skiffle genre|sky_room genre|slack genre|slam_poetry genre|slap_house genre|slavic_folk_metal genre|slayer genre|slc_indie genre|sleaze_rock genre|sleep genre|slovak_hip_hop genre|slovak_pop genre|slovak_rock genre|slovenian_electronic genre|slow_game genre|slowcore genre|sludge_metal genre|small_room genre|smooth_jazz genre|smooth_saxophone genre|smooth_soul genre|smutny_rap genre|soca genre|socal_pop_punk genre|social_media_pop genre|soft_rock genre|solomon_islands_pop genre|son_cubano genre|songwriter genre|sophisti genre|soprano genre|sotalaulut genre|soukous genre|soul genre|soul_blues genre|soul_flow genre|soul_jazz genre|souldies genre|soulful_house genre|sound genre|sound_team genre|soundtrack genre|south_african_alternative genre|south_african_choral genre|south_african_country genre|south_african_gospel genre|south_african_hip_hop genre|south_african_house genre|south_african_jazz genre|south_african_pop genre|south_african_pop_dance genre|south_african_rock genre|south_carolina_hip_hop genre|south_carolina_indie genre|southern_china_indie genre|southern_gospel genre|southern_hip_hop genre|southern_metal genre|southern_rock genre|southern_soul genre|southern_soul_blues genre|soviet_synthpop genre|sovietwave genre|space_age_pop genre|space_ambient genre|space_rock genre|spacewave genre|spanish_baroque genre|spanish_classical genre|spanish_classical_piano genre|spanish_folk_metal genre|spanish_folk_rock genre|spanish_hip_hop genre|spanish_indie_pop genre|spanish_invasion genre|spanish_metal genre|spanish_modern_rock genre|spanish_new_wave genre|spanish_noise_pop genre|spanish_pop genre|spanish_pop_rock genre|spanish_prog genre|spanish_punk genre|spanish_renaissance genre|spanish_rock genre|spanish_rockabilly genre|spanish_synthpop genre|spanish_techno genre|speed_garage genre|speed_metal genre|speedcore genre|speedrun genre|spiritual_hip_hop genre|spiritual_jazz genre|spirituals genre|spytrack genre|st_louis_rap genre|steampunk genre|stockholm_indie genre|stomp_and_flutter genre|stomp_and_holler genre|stomp_pop genre|stoner_metal genre|stoner_rock genre|straight genre|straight_edge genre|streektaal genre|street_band genre|street_punk genre|street_punk_espanol genre|streichquartett genre|stride genre|string_folk genre|string_orchestra genre|string_quartet genre|strut genre|style_jazz genre|sudanese_pop genre|sufi genre|sung_poetry genre|sunshine_pop genre|suomi_rock genre|suomirap genre|suomisaundi genre|supergroup genre|surf_music genre|surf_punk genre|surinamese_pop genre|svensk_progg genre|swamp_blues genre|swamp_pop genre|swamp_rock genre|swancore genre|swedish_alternative_rock genre|swedish_americana genre|swedish_black_metal genre|swedish_choir genre|swedish_country genre|swedish_dancehall genre|swedish_death_metal genre|swedish_doom_metal genre|swedish_electronic genre|swedish_electropop genre|swedish_eurodance genre|swedish_folk_pop genre|swedish_gangsta_rap genre|swedish_garage_rock genre|swedish_hard_rock genre|swedish_hardcore genre|swedish_heavy_metal genre|swedish_hip_hop genre|swedish_idol_pop genre|swedish_indie_folk genre|swedish_indie_pop genre|swedish_indie_rock genre|swedish_jazz genre|swedish_melodic_rock genre|swedish_metal genre|swedish_metalcore genre|swedish_pop genre|swedish_post genre|swedish_power_metal genre|swedish_prog genre|swedish_progressive_metal genre|swedish_punk genre|swedish_reggae genre|swedish_rock genre|swedish_singer genre|swedish_soul genre|swedish_synth genre|swedish_synthpop genre|swedish_techno genre|swedish_trap genre|swedish_trap_pop genre|swedish_tropical_house genre|swing genre|swing_italiano genre|swing_revival genre|swiss_black_metal genre|swiss_country genre|swiss_folk genre|swiss_hip_hop genre|swiss_indie genre|swiss_metal genre|swiss_pop genre|swiss_punk genre|swiss_rock genre|swiss_techno genre|sydney_indie genre|symphonic_black_metal genre|symphonic_death_metal genre|symphonic_metal genre|symphonic_power_metal genre|symphonic_rock genre|synth_funk genre|synth_punk genre|synthesizer genre|synthetic_classical genre|synthpop genre|synthwave genre|syrian_pop genre|tagalog_rap genre|tagalog_worship genre|tahitian genre|taiwan_campus_folk genre|taiwan_classical_performance genre|taiwan_pop genre|taiwan_singer genre|taiwanese_indigenous genre|talent_show genre|tamaulipas_indie genre|tamaulipas_rap genre|tamil_devotional genre|tamil_hip_hop genre|tamil_indie genre|tamil_pop genre|tampa_indie genre|tango genre|tango_cancion genre|tape_club genre|tatar_pop genre|tech_house genre|tech_trance genre|technical_black_metal genre|technical_brutal_death_metal genre|technical_death_metal genre|technical_groove_metal genre|technical_thrash genre|techno genre|techno_argentina genre|techno_kayo genre|tecnobanda genre|tecnobrega genre|teen_pop genre|tejano genre|tekk genre|tempe_indie genre|tennessee_hip_hop genre|terrorcore genre|tex genre|texas_blues genre|texas_country genre|texas_latin_rap genre|texas_pop_punk genre|thai_folk genre|thai_folk_pop genre|thai_folk_rock genre|thai_hip_hop genre|thai_idol genre|thai_indie genre|thai_indie_pop genre|thai_indie_rock genre|thai_instrumental genre|thai_pop genre|thai_pop_rap genre|thai_rock genre|thai_teen_pop genre|theme genre|theremin genre|thrash_core genre|thrash_metal genre|tibetan_pop genre|timba genre|time genre|tin_pan_alley genre|tipico genre|tolkien_metal genre|tonk_piano genre|torch_song genre|toronto_indie genre|toronto_rap genre|trad_doom_metal genre|trad_metal genre|trad_quebecois genre|traditional_bluegrass genre|traditional_blues genre|traditional_british_folk genre|traditional_country genre|traditional_folk genre|traditional_scottish_folk genre|traditional_ska genre|traditional_soul genre|trance genre|trance_brasileiro genre|trance_mexicano genre|trancecore genre|transpop genre|trap genre|trap_argentino genre|trap_baiano genre|trap_boricua genre|trap_brasileiro genre|trap_carioca genre|trap_catala genre|trap_colombiano genre|trap_cristao genre|trap_dominicano genre|trap_funk genre|trap_italiana genre|trap_latino genre|trap_mexicano genre|trap_peruano genre|trap_queen genre|trap_soul genre|trap_triste genre|trap_venezolano genre|traprun genre|triangle_indie genre|tribal_house genre|trio_cubano genre|trip_hop genre|trival genre|trondersk_musikk genre|tropical genre|tropical_house genre|tropicalia genre|trot genre|trova genre|trova_mexicana genre|truck genre|turbo_folk genre|turkish_alt_pop genre|turkish_alternative genre|turkish_alternative_rock genre|turkish_classical genre|turkish_classical_performance genre|turkish_edm genre|turkish_folk genre|turkish_hip_hop genre|turkish_instrumental genre|turkish_jazz genre|turkish_modern_jazz genre|turkish_pop genre|turkish_psych genre|turkish_punk genre|turkish_rock genre|turkish_singer genre|turkish_trap genre|turkish_trap_pop genre|turntablism genre|twee_pop genre|twoubadou genre|tzadik genre|uk82 genre|uk_alternative_hip_hop genre|uk_alternative_pop genre|uk_americana genre|uk_contemporary_r genre|uk_dance genre|uk_dancehall genre|uk_dnb genre|uk_doom_metal genre|uk_drill genre|uk_dub genre|uk_experimental_electronic genre|uk_funky genre|uk_garage genre|uk_hip_hop genre|uk_house genre|uk_metalcore genre|uk_pop genre|uk_pop_punk genre|uk_post genre|uk_reggae genre|uk_rockabilly genre|uk_worship genre|ukg_revival genre|ukhc genre|ukrainian_choir genre|ukrainian_classical genre|ukrainian_classical_piano genre|ukrainian_electronic genre|ukrainian_folk genre|ukrainian_pop genre|ukrainian_rock genre|ukulele genre|umbanda genre|umea_hardcore genre|underground_hip_hop genre|underground_power_pop genre|underground_rap genre|university_choir genre|uplifting_trance genre|uptempo_hardcore genre|urban_contemporary genre|urbano_espanol genre|us_power_metal genre|uzbek_pop genre|vallenato genre|vallenato_moderno genre|vancouver_indie genre|vancouver_metal genre|vancouver_punk genre|vapor_pop genre|vapor_soul genre|vapor_trap genre|vapor_twitch genre|vaporwave genre|variete_francaise genre|varmland_rock genre|vbs genre|vegan_straight_edge genre|vegas_indie genre|velha_guarda genre|venezuelan_hip_hop genre|venezuelan_indie genre|venezuelan_rock genre|veracruz_indie genre|verdiana genre|victorian_britain genre|video_game_music genre|vienna_indie genre|viet_lo genre|vietnamese_hip_hop genre|viking_black_metal genre|viking_folk genre|viking_metal genre|villancicos genre|vintage_cantonese_pop genre|vintage_chanson genre|vintage_chinese_pop genre|vintage_classical_singing genre|vintage_country_folk genre|vintage_dutch_pop genre|vintage_finnish_jazz genre|vintage_french_electronic genre|vintage_gospel genre|vintage_hollywood genre|vintage_italian_pop genre|vintage_italian_soundtrack genre|vintage_jazz genre|vintage_schlager genre|vintage_swedish_pop genre|vintage_taiwan_pop genre|vintage_tango genre|viola_caipira genre|viola_da_gamba genre|violao genre|violao_classico genre|violin genre|viral_pop genre|viral_rap genre|viral_trap genre|virgin_islands_reggae genre|virginia_hip_hop genre|virginia_metal genre|virginia_punk genre|visor genre|visual_kei genre|vocal_ensemble genre|vocal_harmony_group genre|vocal_house genre|vocal_jazz genre|vocal_trance genre|vocaloid genre|volksmusik genre|volkspop genre|waiata_mo_tamariki genre|warm_drone genre|washington_indie genre|wassoulou genre|water genre|wave genre|welsh_indie genre|welsh_metal genre|welsh_rock genre|west_african_jazz genre|west_coast_rap genre|west_coast_reggae genre|west_coast_trap genre|west_end genre|west_virginia_indie genre|western_americana genre|western_swing genre|white_noise genre|wind_symphony genre|witch_house genre|wonky genre|woogie genre|wop genre|workout_product genre|world genre|world_chill genre|world_fusion genre|world_worship genre|worship genre|wrestling genre|wu_fam genre|wyoming_roots genre|xhosa genre|xinyao genre|xtra_raw genre|yacht_rock genre|yaoi genre|ye_ye genre|yodeling genre|york_indie genre|yugoslav_new_wave genre|yugoslav_rock genre|zhongguo_feng genre|zillertal genre|zither genre|zolo genre|zouglou genre|zouk genre|zouk_riddim danceability energy loudness speechiness acousticness instrumentalness liveness valence tempo pop|0 pop|1 pop|2 pop|3 pop|4 pop|5 pop|6 pop|7 pop|8 pop|9 pop|10 pop|11 pop|12 pop|13 pop|14 pop|15 pop|16 pop|17 pop|18 pop|19 pop|20 year|1926 year|1927 year|1928 year|1930 year|1935 year|1936 year|1939 year|1940 year|1941 year|1942 year|1945 year|1946 year|1947 year|1948 year|1949 year|1950 year|1951 year|1952 year|1953 year|1954 year|1955 year|1956 year|1957 year|1958 year|1959 year|1960 year|1961 year|1962 year|1963 year|1964 year|1965 year|1966 year|1967 year|1968 year|1969 year|1970 year|1971 year|1972 year|1973 year|1974 year|1975 year|1976 year|1977 year|1978 year|1979 year|1980 year|1981 year|1982 year|1983 year|1984 year|1985 year|1986 year|1987 year|1988 year|1989 year|1990 year|1991 year|1992 year|1993 year|1994 year|1995 year|1996 year|1997 year|1998 year|1999 year|2000 year|2001 year|2002 year|2003 year|2004 year|2005 year|2006 year|2007 year|2008 year|2009 year|2010 year|2011 year|2012 year|2013 year|2014 year|2015 year|2016 year|2017 year|2018 year|2019 year|2020 year|2021 id
0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.135425 0.09420 0.170430 0.006811 0.076707 0.000000e+00 0.01926 0.0940 0.061779 0.15 0.0 0.0 0.0 0.00 0.0 0.0 0.0 0.00 0.00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6p0ecVFjeSu09Ncb1bUEGR
1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.667266 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.672365 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.32044 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.117004 0.06680 0.149885 0.005511 0.108635 1.190000e-06 0.01350 0.0486 0.123521 0.00 0.0 0.0 0.0 0.00 0.0 0.0 0.0 0.00 0.15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1M97kKsHd1mw2rj4WCH2TA
2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.631158 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.30310 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.713982 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.072470 0.04160 0.159106 0.006997 0.177510 4.080000e-07 0.03000 0.0556 0.119275 0.00 0.0 0.0 0.0 0.00 0.0 0.0 0.0 0.15 0.00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5cbbtFwm09MwwicU9SDHJA
3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.124494 0.14460 0.174051 0.006502 0.084940 0.000000e+00 0.05700 0.1086 0.127088 0.00 0.0 0.0 0.0 0.00 0.0 0.0 0.0 0.15 0.00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3LoGT3vFIUqpcNmFm4PUn4
4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.140486 0.01828 0.129826 0.009928 0.169679 0.000000e+00 0.02240 0.0930 0.099736 0.00 0.0 0.0 0.0 0.15 0.0 0.0 0.0 0.00 0.00 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0aFLzyYOsaP5sf37DcY5fC

3. Yhdistetään spotify¶

In [28]:
#client id ,secret ja redirect uri spotify dashboardilta asetetaan enviroment 
# muuttujiksi bashissa
'''
export SPOTIPY_CLIENT_ID = xxxxx
export SPOTIPY_CLIENT_SECRET = xxxxxx
export SPOTIPY_REDIRECT_URI=http://127.0.0.1:8000/api/spotify/callback/
'''
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
from spotipy.oauth2 import SpotifyOAuth

scope = "user-read-private user-read-email playlist-modify-private playlist-modify-public user-read-currently-playing user-read-playback-position user-read-playback-state playlist-read-private user-read-recently-played user-top-read user-library-read user-modify-playback-state"

SPOTIPY_CLIENT_ID=os.environ.get('SPOTIFY_CLIENT_ID')
SPOTIPY_CLIENT_SECRET=os.environ.get('SPOTIFY_CLIENT_SECRET')

sp = spotipy.Spotify(auth_manager=SpotifyOAuth(scope=scope))
In [29]:
# Haetaan playlistit ja kuvat
id_name = {}
list_photo = {}
for i in sp.current_user_playlists()['items']:
    id_name[i['name']] = i['uri'].split(':')[2]
    list_photo[i['uri'].split(':')[2]] = i['images'][0]['url']
In [30]:
id_name
Out[30]:
{'Angst': '5tQAKRgyZPis2WXeMyCpi1',
 'Chill': '12TnrU65MdD0XPBIpZzaPn',
 'This Is Disturbed': '37i9dQZF1DZ06evO2h1EQ0',
 "It's Hits Suomi": '37i9dQZF1DX64Cx4vTeaRB',
 'Relaxing Music': '1r4hnyOWexSvylLokn2hUa',
 'VOLUME SUOMI': '37i9dQZF1DX7Zqfq7rklwe',
 '90s Rock Anthems': '37i9dQZF1DX1rVvRgjX59F',
 'GYM & WORKOUT - ENERGY BOOST - PHONK 2024 - TOP 100': '11qWQdznqIoLPfJMxpNb8q',
 'This Is Mokoma': '37i9dQZF1DZ06evO1AMsvC',
 'Randomshit': '7sfCvm0My2K9s8StSc3Eeb',
 'Your Top Songs 2020': '37i9dQZF1EM13bCjTWM6Ic',
 'Tykätty radiosta': '4ATxFjXhXHwAbKw95x49yY',
 'Mokoma – Ihmissokkelo': '1gGGwULYY0g7PwC1sxxXXj',
 'Tuska 2024': '37i9dQZF1DX3u3fNywFtSp',
 'Heviä treeneihin': '37i9dQZF1DX4hwE1SnAWXj',
 'This Is Stam1na': '37i9dQZF1DZ06evO2lzVeb',
 'This Is Ghost': '37i9dQZF1DZ06evO12mjqo',
 'This Is In This Moment': '37i9dQZF1DZ06evO3OVkju',
 'New Music Friday Suomi': '37i9dQZF1DWXtcXUwhuzFM',
 'Mokoma Radio': '37i9dQZF1E4pY4NmnoyLMt',
 'Jaksaa jaksaa!': '37i9dQZF1DWTXjnGqnDUEs',
 'Beast Mode': '37i9dQZF1DX76Wlfdnj7AP',
 'Adrenaline Workout': '37i9dQZF1DXe6bgV3TmZOL',
 'Suomiräpin klassikot': '37i9dQZF1DXbYUVKgXZtWJ',
 'This Is Linkin Park': '37i9dQZF1DZ06evO47cwRq',
 'Prodigy': '2YVtLFLJxGaD5a8dfESwMr',
 'Dance Party': '37i9dQZF1DXaXB8fQg7xif',
 'Throwback Party': '37i9dQZF1DX7F6T2n2fegs',
 'Vappu 2023': '37i9dQZF1DWWGQ7SVOS3vk',
 'TIPPA – Matias': '2Wwts1gqzxUOI93qLHowP5',
 'Turmion Kätilöt – Dance Panique': '3ED4CgYd1PvUBo72pYXp4K',
 'Mokoma – Viides vuodenaika': '0oba3CnyXBg4VmmwBdxeEZ',
 'Mokoma – Juurta jaksain': '2kVuCcF15mLPojnPg4WQJU',
 'Mokoma – Yksi': '6oGF7XnHo6m6wE2tYa3ios',
 'Mokoma – Valu': '3IasYYketS9WpXcpEzrg8f',
 'Mokoma – Mokoman 120 Päivää': '6gfJpzfXQC2f4LLyXlvsxC',
 'Mokoma – Tämän maailman ruhtinaan hovi': '3dm729CEp7qCDxs97ST68y',
 'Mokoma – Kurimus': '3N8ryMc90gWP78vtzWxIxe',
 'Mokoma – Kuoleman laulukunnaat': '71aUwKuzl3lvoKv5EdKibX',
 'Mokoma – Luihin ja ytimiin': '6CiUjHzdaIB2RS1S0GJjeH',
 'Mokoma – Sydänjuuret': '7bTgLHpJAjUOO0xnRD8OUR',
 'Mokoma – Varjopuoli': '4XzuyBuHhCTuOqWbhXiVyx',
 'Mokoma – 180 astetta': '2YpjB9AuAXlJunrRdGVk8l',
 'Mokoma – Elävien kirjoihin': '3AVVnwEMaqkIQeRUohRoKG',
 'Mokoma – Laulurovio': '1zyLZpsnDMfd5HsLcmkuSm',
 'Mokoma – Hengen pitimet': '3E3SvPeBvnGs2adNG1PKlG',
 'This Is Eminem': '37i9dQZF1DZ06evO4gTUOY',
 'This Is Sentenced': '37i9dQZF1DZ06evO3803Bd',
 'Suosituimmat suomalaiset biisit 2018': '37i9dQZF1DX2EDL70q49dY',
 '#vainsuomihitit': '37i9dQZF1DWUvzPS8uIABd'}
In [31]:
def create_necessary_outputs(playlist_name,id_dic, df):
    """ 
    Hakee kappaleita tietyltä soittolistalta.

    Parametrit: 
        playlist_name (str): nimi soittolistalle, jolta haluat hakea Spotify API:n kautta
        id_dic (dic): sanakirja, joka määrittää soittolistan nimen soittolista-id:ksi
        df (pandas dataframe): Spotify-datakehys
        
    Palauttaa: 
        playlist: kaikki soittolistassa olevat kappaleet, JOTKA OVAT SAATAVILLA KAGGLE-DATASETISTA
    """
    
    # Luo soittolista-datakehys
    playlist = pd.DataFrame()
    playlist_name = playlist_name

    # Käy läpi soittolistan kappaleet
    for ix, i in enumerate(sp.playlist(id_dic[playlist_name])['tracks']['items']):
        # Tallenna kappaleen tiedot datakehysään
        playlist.loc[ix, 'artist'] = i['track']['artists'][0]['name']
        playlist.loc[ix, 'name'] = i['track']['name']
        playlist.loc[ix, 'id'] = i['track']['id']
        playlist.loc[ix, 'url'] = i['track']['album']['images'][1]['url']
        playlist.loc[ix, 'date_added'] = i['added_at']

    # Muuta lisäyspäivämäärät aikaleimoiksi
    playlist['date_added'] = pd.to_datetime(playlist['date_added'])  
    
    # Suodata soittolista ja järjestä se lisäyspäivämäärän mukaan laskevasti
    playlist = playlist[playlist['id'].isin(df['id'].values)].sort_values('date_added',ascending = False)
    
    return playlist
In [32]:
playlist_90s = create_necessary_outputs('90s Rock Anthems', id_name,spotify_df)
In [33]:
def visualize_songs(df):
    """ 
    Visualize cover art of the songs in the inputted dataframe

    Parameters: 
        df (pandas dataframe): Playlist Dataframe
    """
    
    temp = df['url'].values
    
    plt.figure(figsize=(15,int(0.625 * len(temp))))

    columns = 5
    
    for i, url in enumerate(temp):
        plt.subplot( int(len(temp) / columns + 1), columns, i + 1)

        image = io.imread(url)
        plt.imshow(image)
        plt.xticks(color = 'w', fontsize = 0.1)
        plt.yticks(color = 'w', fontsize = 0.1)
        plt.xlabel(df['name'].values[i], fontsize = 12)
        plt.tight_layout(h_pad=0.4, w_pad=0)
        plt.subplots_adjust(wspace=None, hspace=None)

    plt.show()
In [34]:
playlist_90s
Out[34]:
artist name id url date_added
0 The Offspring The Kids Aren't Alright 4EchqUKQ3qAQuRNKmeIpnf https://i.scdn.co/image/ab67616d00001e02cbd2ee... 2024-01-18 09:03:43+00:00
49 Live Lightning Crashes 48iWbsOaBUAGzMdoSmqyg1 https://i.scdn.co/image/ab67616d00001e0223d8d8... 2024-01-18 09:03:43+00:00
51 Pearl Jam Alive 1L94M3KIu7QluZe63g64rv https://i.scdn.co/image/ab67616d00001e02d400d2... 2024-01-18 09:03:43+00:00
52 Nine Inch Nails Closer 5mc6EyF1OIEOhAkD0Gg9Lc https://i.scdn.co/image/ab67616d00001e024078c2... 2024-01-18 09:03:43+00:00
53 Sublime What I Got 3B4q6KbHbGV51HO3GznBFF https://i.scdn.co/image/ab67616d00001e028fc4b0... 2024-01-18 09:03:43+00:00
57 Bush Machinehead - Remastered 1wrhhPzd2ncJPNgUcGgBGg https://i.scdn.co/image/ab67616d00001e02158123... 2024-01-18 09:03:43+00:00
58 Guns N' Roses November Rain 3YRCqOhFifThpSRFJ1VWFM https://i.scdn.co/image/ab67616d00001e02e44963... 2024-01-18 09:03:43+00:00
60 Nirvana Heart-Shaped Box 11LmqTE2naFULdEP94AUBa https://i.scdn.co/image/ab67616d00001e02aca059... 2024-01-18 09:03:43+00:00
62 Lit My Own Worst Enemy 39sICagGOiysHxoIBRyLLi https://i.scdn.co/image/ab67616d00001e02c5d01e... 2024-01-18 09:03:43+00:00
64 Everclear Santa Monica 37EJtTS7jT5WUyXGZzrwnI https://i.scdn.co/image/ab67616d00001e02ec4d79... 2024-01-18 09:03:43+00:00
65 Candlebox Far Behind 3mhOmh4tRKsMfnRmgZfeBm https://i.scdn.co/image/ab67616d00001e02dbb122... 2024-01-18 09:03:43+00:00
66 Third Eye Blind Semi-Charmed Life 42et6fnHCw1HIPSrdPprMl https://i.scdn.co/image/ab67616d00001e024139c9... 2024-01-18 09:03:43+00:00
67 Radiohead Karma Police 63OQupATfueTdZMWTxW03A https://i.scdn.co/image/ab67616d00001e02c8b444... 2024-01-18 09:03:43+00:00
68 Radiohead High and Dry 2a1iMaoWQ5MnvLFBDv4qkf https://i.scdn.co/image/ab67616d00001e029293c7... 2024-01-18 09:03:43+00:00
71 Scorpions Wind Of Change 3ovjw5HZZv43SxTwApooCM https://i.scdn.co/image/ab67616d00001e02787674... 2024-01-18 09:03:43+00:00
72 Ugly Kid Joe Everything About You 1O2ACd0zg4GYgQRhLBGYDV https://i.scdn.co/image/ab67616d00001e028c6b83... 2024-01-18 09:03:43+00:00
74 Seven Mary Three Cumbersome 6u1yKoh00WaoSpNp46RzKF https://i.scdn.co/image/ab67616d00001e02c5ceab... 2024-01-18 09:03:43+00:00
76 Guns N' Roses Live And Let Die 0rFWuqFgHAfuzE8uSB9TWR https://i.scdn.co/image/ab67616d00001e02e44963... 2024-01-18 09:03:43+00:00
77 The Black Crowes Hard To Handle 05NYcsjJwOYq4jIiKPVj9p https://i.scdn.co/image/ab67616d00001e02a4d2cb... 2024-01-18 09:03:43+00:00
79 Fuel Shimmer 6WdoToI0z5f4A4kbZ3SXoa https://i.scdn.co/image/ab67616d00001e029b3c3a... 2024-01-18 09:03:43+00:00
80 Incubus Pardon Me 1Y13csEpu3TK5gQdzGLrd8 https://i.scdn.co/image/ab67616d00001e0274fad4... 2024-01-18 09:03:43+00:00
83 Alice In Chains Would? (2022 Remaster) 5sFDReWLrZHLFZFjHsjUTS https://i.scdn.co/image/ab67616d00001e021cd131... 2024-01-18 09:03:43+00:00
85 Jane's Addiction Jane Says 7c1Dar0pIAW7w5TzaGjt9t https://i.scdn.co/image/ab67616d00001e028765ac... 2024-01-18 09:03:43+00:00
86 Rage Against The Machine Guerrilla Radio 1wsRitfRRtWyEapl0q22o8 https://i.scdn.co/image/ab67616d00001e023c2579... 2024-01-18 09:03:43+00:00
88 Silverchair Freak 2RDgs05sg2vrpwiAEUkWd0 https://i.scdn.co/image/ab67616d00001e02f6e1df... 2024-01-18 09:03:43+00:00
90 311 All Mixed Up 18ZOH3KKu5Elt5ysocFyX4 https://i.scdn.co/image/ab67616d00001e0244583d... 2024-01-18 09:03:43+00:00
91 Sugar Ray Fly 3uPfVXcjnpOjyzI3jb3js4 https://i.scdn.co/image/ab67616d00001e0264b697... 2024-01-18 09:03:43+00:00
92 Nada Surf Popular 48sJGpBLqQTs0sZ2ImHJof https://i.scdn.co/image/ab67616d00001e02a46129... 2024-01-18 09:03:43+00:00
96 Deftones Be Quiet and Drive (Far Away) 4Uiw0Sl9yskBaC6P4DcdVD https://i.scdn.co/image/ab67616d00001e020b1129... 2024-01-18 09:03:43+00:00
97 The Breeders Cannonball 1KdwPeY1WRWQGHCmRJTveb https://i.scdn.co/image/ab67616d00001e02fbf772... 2024-01-18 09:03:43+00:00
98 U2 One 3G69vJMWsX6ZohTykad2AU https://i.scdn.co/image/ab67616d00001e0237cd18... 2024-01-18 09:03:43+00:00
50 Blind Melon No Rain 6txWz9UapYHVxEd7dDIHXT https://i.scdn.co/image/ab67616d00001e027ed1df... 2024-01-18 09:03:43+00:00
48 Lenny Kravitz Are You Gonna Go My Way 45Ia1U4KtIjAPPU7Wv1Sea https://i.scdn.co/image/ab67616d00001e02542d87... 2024-01-18 09:03:43+00:00
2 Rage Against The Machine Killing In The Name 59WN2psjkt1tyaxjspN8fp https://i.scdn.co/image/ab67616d00001e0254ab61... 2024-01-18 09:03:43+00:00
47 Stone Temple Pilots Interstate Love Song - 2019 Remaster 6qLEOZvf5gI7kWE63JE7p3 https://i.scdn.co/image/ab67616d00001e02fc7df8... 2024-01-18 09:03:43+00:00
4 Red Hot Chili Peppers Under the Bridge 3d9DChrdc6BOeFsbrZ3Is0 https://i.scdn.co/image/ab67616d00001e02153d79... 2024-01-18 09:03:43+00:00
8 Radiohead Creep 70LcF31zb1H0PyJoS1Sx1r https://i.scdn.co/image/ab67616d00001e02df55e3... 2024-01-18 09:03:43+00:00
9 Metallica Nothing Else Matters 0nLiqZ6A27jJri2VCalIUs https://i.scdn.co/image/ab67616d00001e02cf84c5... 2024-01-18 09:03:43+00:00
10 Alanis Morissette Ironic - 2015 Remaster 1d6KS9GH06JAd19uiBy9IE https://i.scdn.co/image/ab67616d00001e02242e64... 2024-01-18 09:03:43+00:00
12 Stone Temple Pilots Plush 2TAQ9YGehOKWDqDak5DuXc https://i.scdn.co/image/ab67616d00001e02776969... 2024-01-18 09:03:43+00:00
13 Incubus Drive 7nnWIPM5hwE3DaUBkvOIpy https://i.scdn.co/image/ab67616d00001e0274fad4... 2024-01-18 09:03:43+00:00
14 Blur Song 2 - 2012 Remaster 1FTSo4v6BOZH9QxKc3MbVM https://i.scdn.co/image/ab67616d00001e02de1142... 2024-01-18 09:03:43+00:00
15 The Offspring Self Esteem 1FkoVC85Ds3mFoK0fVqEqP https://i.scdn.co/image/ab67616d00001e020158cb... 2024-01-18 09:03:43+00:00
16 Pearl Jam Even Flow 6QewNVIDKdSl8Y3ycuHIei https://i.scdn.co/image/ab67616d00001e02d400d2... 2024-01-18 09:03:43+00:00
17 Red Hot Chili Peppers Scar Tissue 1G391cbiT3v3Cywg8T7DM1 https://i.scdn.co/image/ab67616d00001e0294d08a... 2024-01-18 09:03:43+00:00
18 Spin Doctors Two Princes 4ePP9So5xRzspjLFVVbj90 https://i.scdn.co/image/ab67616d00001e02436e38... 2024-01-18 09:03:43+00:00
19 4 Non Blondes What's Up? 0jWgAnTrNZmOGmqgvHhZEm https://i.scdn.co/image/ab67616d00001e02381371... 2024-01-18 09:03:43+00:00
20 Green Day Good Riddance (Time of Your Life) 6ORqU0bHbVCRjXm9AjyHyZ https://i.scdn.co/image/ab67616d00001e02da4f67... 2024-01-18 09:03:43+00:00
22 Beck Loser 5NTZM8YYeKM2YsGSffVIge https://i.scdn.co/image/ab67616d00001e0254196f... 2024-01-18 09:03:43+00:00
23 Soundgarden Black Hole Sun 2EoOZnxNgtmZaD8uUmz2nD https://i.scdn.co/image/ab67616d00001e02ae6d8e... 2024-01-18 09:03:43+00:00
24 The Smashing Pumpkins Bullet With Butterfly Wings - Remastered 2012 6GtX0jaNL8IjVQfrDBx81z https://i.scdn.co/image/ab67616d00001e02431ac6... 2024-01-18 09:03:43+00:00
25 Guns N' Roses Knockin' On Heaven's Door 4JiEyzf0Md7KEFFGWDDdCr https://i.scdn.co/image/ab67616d00001e0292d21a... 2024-01-18 09:03:43+00:00
28 R.E.M. Losing My Religion 31AOj9sFz2gM0O3hMARRBx https://i.scdn.co/image/ab67616d00001e02e2dd4e... 2024-01-18 09:03:43+00:00
29 The Offspring Come Out and Play 5JJDu0Z5DKe7mR31MGksSg https://i.scdn.co/image/ab67616d00001e020158cb... 2024-01-18 09:03:43+00:00
32 Marilyn Manson Sweet Dreams (Are Made Of This) 2302lUwfZ4S4dVyPOCDFnQ https://i.scdn.co/image/ab67616d00001e0254585a... 2024-01-18 09:03:43+00:00
34 blink-182 All The Small Things 2m1hi0nfMR9vdGC8UcrnwU https://i.scdn.co/image/ab67616d00001e026da502... 2024-01-18 09:03:43+00:00
36 Foo Fighters Learn to Fly 5OQsiBsky2k2kDKy2bX2eT https://i.scdn.co/image/ab67616d00001e02175963... 2024-01-18 09:03:43+00:00
38 The Smashing Pumpkins 1979 - Remastered 2012 5QLHGv0DfpeXLNFo7SFEy1 https://i.scdn.co/image/ab67616d00001e02431ac6... 2024-01-18 09:03:43+00:00
39 Weezer Say It Ain't So 6VoIBz0VhCyz7OdEoRYDiA https://i.scdn.co/image/ab67616d00001e02345536... 2024-01-18 09:03:43+00:00
40 Sublime Santeria 2hnMS47jN0etwvFPzYk11f https://i.scdn.co/image/ab67616d00001e028fc4b0... 2024-01-18 09:03:43+00:00
41 Rage Against The Machine Bulls On Parade 0tZ3mElWcr74OOhKEiNz1x https://i.scdn.co/image/ab67616d00001e02053f00... 2024-01-18 09:03:43+00:00
42 blink-182 What's My Age Again? 4LJhJ6DQS7NwE7UKtvcM52 https://i.scdn.co/image/ab67616d00001e026da502... 2024-01-18 09:03:43+00:00
44 Red Hot Chili Peppers Give It Away 0uppYCG86ajpV2hSR3dJJ0 https://i.scdn.co/image/ab67616d00001e02153d79... 2024-01-18 09:03:43+00:00
45 Beastie Boys Sabotage 0Puj4YlTm6xNzDDADXHMI9 https://i.scdn.co/image/ab67616d00001e02436a30... 2024-01-18 09:03:43+00:00
99 Muse Sunburn 5wq8wceQvaFlOZovDtfr0j https://i.scdn.co/image/ab67616d00001e0234dd1b... 2024-01-18 09:03:43+00:00
In [35]:
# Visualisoidaan data
visualize_songs(playlist_90s)
No description has been provided for this image

4. Lasketaan playlististä vektori¶

In [36]:
Image('./assets/summarization.png')
Out[36]:
No description has been provided for this image
In [37]:
def generate_playlist_feature(complete_feature_set, playlist_df, weight_factor):
    """ 
    Tiivistää käyttäjän soittolistan yhdeksi vektoriksi.

    Parametrit: 
        complete_feature_set (pandas dataframe): Datakehys, joka sisältää kaikki Spotify-kappaleiden ominaisuudet
        playlist_df (pandas dataframe): Soittolista-datakehys
        weight_factor (float): Liukuluku, joka edustaa ajankohtaisuuden painotusta. Mitä suurempi painotus, sitä enemmän painotetaan viimeisimpiä kappaleita. Arvon tulisi olla lähellä 1. 
        
    Palauttaa: 
        playlist_feature_set_weighted_final (pandas series): Yksi ominaisuus, joka tiivistää soittolistan
        complete_feature_set_nonplaylist (pandas dataframe): 
    """
    
    # Suodata koko ominaisuusdatakehys vain soittolistalla oleville kappaleille
    complete_feature_set_playlist = complete_feature_set[complete_feature_set['id'].isin(playlist_df['id'].values)]
    complete_feature_set_playlist = complete_feature_set_playlist.merge(playlist_df[['id','date_added']], on='id', how='inner')
    
    # Erota ominaisuusdatakehys soittolistaan ja siihen kuulumattomiin kappaleisiin
    complete_feature_set_nonplaylist = complete_feature_set[~complete_feature_set['id'].isin(playlist_df['id'].values)]
    
    # Järjestä soittolista päivämäärän mukaan laskevasti
    playlist_feature_set = complete_feature_set_playlist.sort_values('date_added', ascending=False)
    
    # Etsi soittolistan viimeisin päivämäärä
    most_recent_date = playlist_feature_set.iloc[0, -1]
    
    # Laske kuukaudet viimeisimmästä päivämäärästä kuhunkin kappaleeseen
    for ix, row in playlist_feature_set.iterrows():
        playlist_feature_set.loc[ix, 'months_from_recent'] = int((most_recent_date.to_pydatetime() - row.iloc[-1].to_pydatetime()).days / 30)
    
    # Laske painot kuhunkin kappaleeseen
    playlist_feature_set['weight'] = playlist_feature_set['months_from_recent'].apply(lambda x: weight_factor ** (-x))
    
    # Kopioi ja päivitä soittolista painotettuna
    playlist_feature_set_weighted = playlist_feature_set.copy()
    playlist_feature_set_weighted.update(playlist_feature_set_weighted.iloc[:, :-4].mul(playlist_feature_set_weighted.weight, 0))
    playlist_feature_set_weighted_final = playlist_feature_set_weighted.iloc[:, :-4]
    
    return playlist_feature_set_weighted_final.sum(axis=0), complete_feature_set_nonplaylist
In [38]:
complete_feature_set_playlist_vector_90s, complete_feature_set_nonplaylist_90s = generate_playlist_feature(complete_feature_set, playlist_90s, 1.09)

5. Luodaan ehdotuksia¶

In [39]:
Image('./assets/cosine_sim.png')
Out[39]:
No description has been provided for this image
In [40]:
def generate_playlist_recos(df, features, nonplaylist_features):
    """ 
    Hakee kappaleita tietyltä soittolistalta.

    Parametrit: 
        df (pandas dataframe): Spotify-datakehys
        features (pandas series): tiivistetty soittolistan ominaisuus
        nonplaylist_features (pandas dataframe): ominaisuusjoukko kappaleille, jotka eivät ole valitussa soittolistassa
        
    Palauttaa: 
        non_playlist_df_top_40: 40 suositusta kappaleesta kyseiselle soittolistalle
    """
    
    # Suodata kappaleet, jotka eivät ole valitussa soittolistassa
    non_playlist_df = df[df['id'].isin(nonplaylist_features['id'].values)]
    
    # Laske kappaleiden samankaltaisuus soittolistan ominaisuuksien kanssa
    non_playlist_df['sim'] = cosine_similarity(nonplaylist_features.drop('id', axis=1).values, features.values.reshape(1, -1))[:,0]
    
    # Valitse parhaat 40 suositusta kappaleet ja hae niille kuvat Spotifyn API:sta
    non_playlist_df_top_40 = non_playlist_df.sort_values('sim', ascending=False).head(40)
    non_playlist_df_top_40['url'] = non_playlist_df_top_40['id'].apply(lambda x: sp.track(x)['album']['images'][1]['url'])
    
    return non_playlist_df_top_40
In [41]:
top40_90s = generate_playlist_recos(spotify_df, complete_feature_set_playlist_vector_90s, complete_feature_set_nonplaylist_90s)
In [42]:
visualize_songs(top40_90s)
No description has been provided for this image
In [ ]: